概述
初学C语言,看了郝斌老师的视频,获益良多,以下是根据郝斌老师的思路写出的代码,仅用来巩固一下所学到的知识,没什么实际意义。
再看《C Primer Plus》,发现国外的人就是不一样,写出来的代码比谭的书中的代码优美N倍。
ps:下面的程序是经过多次改动,和原来郝斌相差巨大了....
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h> //调用Windows系统函数,其他平台下不可用
#define SHOWINFO 0
#define INSER 1
#define Search 2
#define CLEAR 3
#define CLS 4
#define QUIT 5
typedef struct student
{
char name[20] ;
float sore ;
int age ;
}*ST ;
int size = sizeof(struct student) ;
FILE * fp ;
void showinfo(void) ;
int choice(void) ;
void get_choice(int) ;
void IO(void) ; //把学生信息写入到结构数组,再调用fp_write写入文件
void output(ST, int) ; //此函数功能是输入学生信息到屏幕
void fp_write(ST, int) ; //把结构数组中的数据写入到文件中储存
void fp_read(void) ; //读取文件中记录的学生信息
void search(void) ; //按一定条件查找文件中的学生信息
void get_s_choice(ST, int) ;
void name_find(ST) ;
void sore_find(ST) ;
void age_find(ST) ;
void Open_File(void) ;
void fclear(void) ; //删除文件函数
void jh_print(void) ; //太多***看起来不舒服
int main(void)
{
int sel;
showinfo() ;
while(1)
{
sel = choice() ;
get_choice(sel) ;
}
return 0 ;
}
void showinfo()
{
jh_print() ;
printf("* 欢迎使用学生成绩管理系统 *n") ;
printf("* 按0显示数据库的学生信息 *n") ;
printf("* 按1开始录入的学生信息 *n") ;
printf("* 按2查找文件中的学生信息 *n") ;
printf("* 按3清空文件中存在的信息 *n") ;
printf("* 按4清屏 *n") ;
printf("* 按5退出学生成绩管理系统 *n") ;
jh_print() ;
}
int choice()
{
int i ;
char ch ;
while( scanf("%d",&i) != 1 ) //此语句功能是剔除用户错误的输入,下面也有类似的不再注释
{
while( (ch = getchar() ) != 'n' ) ;
; //注意这个是空语句,下面不再提醒
printf("输入错误,请重新输入:n",i) ;
}
return i ;
}
void get_choice(int sel)
{
switch(sel)
{
case SHOWINFO :
fp_read() ; //输入0则调用此函数
break ;
case INSER :
IO() ; //输入1则调用此函数
break ;
case Search :
search() ;
break ;
case CLEAR :
fclear() ;
break ;
case CLS :
system("cls") ;
break ;
case QUIT :
printf("GoodBye!n") ; // 输入4直接退出程序
Sleep(2000) ;
system("start http://wiyi.org") ;
exit(1) ;
break ;
default :
break ;
}
}
void IO(void)
{
ST pst = NULL ;
int i,len ;
char ch ;
printf("您需要录入多少个学生信息?nnum = ") ;
while( (scanf("%d",&len)) != 1 || len <=0 || len > 10 )
{
while((ch = getchar()) != 'n')
putchar(ch) ;
printf("%c是一个错误输入,请重新输入(1-10)nlen = ") ;
}
pst = (ST)malloc((sizeof(struct student)) * len) ;
if( pst == NULL)
{
printf("内存分配失败!n") ;
exit(-1) ;
}
for(i=0;i<len;++i)
{
while( getchar() == 'n' ) //剔除换行符影响fgets读取信息
break ;
printf("请输入第%d个学生的姓名:nname = ",i+1) ;
fgets(pst[i].name,19,stdin) ;
if( (pst[i].name[strlen(pst[i].name) - 1] ) == 'n')
pst[i].name[strlen(pst[i].name) - 1] = '