1、6、系统以菜单方式工作2 系统总框图和功能模块说明2.1 系统总框图图1 系统总框图2.2 功能模块说明系统初始化模块:完成系统初始化。创建信息链表模块:在本地创建学生籍贯文件,保存学生籍贯信息。输入学生信息模块:完成学生籍贯信息的录入。修改学生信息模块:完成学生籍贯信息的修改。查询学生信息模块:完成学生籍贯信息的查询。删除学生信息模块:完成学生籍贯信息的删除。重置学生信息模块:完成学生籍贯信息的重置。保存学生信息模块:完成学生籍贯信息的保存。3 系统设计3.1 主要结构体学生信息:学号、姓名、籍贯typedef struct short zhku_status; char zhku_numb
2、er12; char zhku_name10; char zhku_address20; StuType;3.2主要功能函数void zhku_AddData(void) /*录入数据*/void wxw_ListData(void) /*显示所有数据*/void wp_Delete(void) /*做删除标记*/void wp_Pack(void) /*重置信息*/void zhku_UpdateData(void) /*修改*/void SH_Search(void) /*查询*/3.3 关键函数的流程图4 系统调试打开程序后按任意键,将会出现上述界面。按“1”键,再按回车键,出现以上录入
3、菜单。录入成功后提示是否继续,选择后按回车键进行操作。此为查询功能菜单,若输入程序没有录入的学号、姓名、籍贯时,则会显示出“无此人的籍贯信息”。此为删除学生信息菜单界面,按照菜单操作即可。如果要退出该程序,直接按“7”后在按回车键即可。5 总结这次我做的c语言工程实训是“籍贯信息记录簿”,在编写程序时也遇到不少的困难。其中最困扰我的文件操作方面,因为是记录簿程序,所以文件方面用得较多。通过再回去认真的复习一遍相关知识后,终于完成了各个模块的编写。因为这次的程序细分为void wp_Delete(void) /*做删除标记*/ void wp_Pack(void) /*重置信息*/void zh
4、ku_UpdateData(void) /*修改*/ void SH_Search(void) *查询*/六个模块,在完成了全部模块的编写后,又一个困扰我的问题出现了-就是各模块功能完整,到整合在一起组建时却发生了错误。经过半天的排查,发现有些模块用了全局变量,致使程序发生错误。再删除掉全局变量后,程序经过简单的修改又重生了。 总的来说,这次实训给了我亲手完成一个简单系统的编写,经过需求分析、系统总框图和功能模块明、系统设计、系统调试等几个流程,让我实实在在地体验了一番写程序的过程。同时也发现自己的水平还很有限,应该再加把劲学习好计算机编程。6 源程序清单#includestdio.h /标准
5、输入输出文件包含预处理命令stdlib.hstring.h /字符串文件包含预处理命令conio.hctype.h /包含tolower()的原型 char zhku_number10; FILE*fp; char a; StuType stu; char zhku_tag; stu.zhku_status=0; do printf(nnnn *按ESC返回主菜单*n);nn *按Space确认开始录入信息*nnn 请输入学生学号: if(a=getch()=27) return; /*这个函数可以让用户按下任意键而不需要回车就可以接受到用户的输入*/ scanf(%s,stu.zhku_nu
6、mber); while (stu.zhku_number=NULL) printf(输入非法,重新输入: /zhku_tag=getchar(); scanf( /while (getchar() !=n n 请输入学生姓名: ,stu.zhku_name); while (stu.zhku_number=NULL) printf(n 请输入学生籍贯:,stu.zhku_address); fseek(fp,0,SEEK_END);/移动文件内部位置指针 fwrite(&stu,sizeof(StuType),1,fp); /将信息存入文件中n录入成功,继续吗?(y/n): while (g
7、etchar()! /跳过当前行 /zhku_tag=getchar();,&zhku_tag); /大写字母转化为小写字母 zhku_tag=tolower(zhku_tag); while (zhku_tag !y&zhku_tag !n)输入非法,重新输入(y/n): while (getchar() ! zhku_tag=tolower(zhku_tag); while (zhku_tag=nnnn *按ESC返回主菜单*nnnnnnn do a=getch(); while(a!=27); return;n%-15s%-15s%-25sn,学号姓名籍贯-n rewind(fp); f
8、read(&/读入信息 while(!feof(fp)/文件未结束 if (stu.zhku_status=0)%-15s%-15s%-25sn,stu.zhku_number,stu.zhku_name,stu.zhku_address); fread(& clearerr/*复位错误标志(清除文件结束标志)*/(fp); char elc; char wp_number10;n *请选择要删除的方式*nn 1.删除个人信息nn 2.删除全部信息nnnn *按ESC返回主菜单*nn *按Space确认开始功能选择*nnn 请选择功能: if(a=getch()=27) return;elc)
9、; switch(elc) case 1:printf(n 输入要删除的学生学号:,wp_number);/使位置指针返回到文件的开头feof(fp) if(strcmp(stu.zhku_number,wp_number)=0&stu.zhku_status=0)/数据状态正常,未作删除标志 break; if(!nn被删除的记录为:n/输出信息n 删除成功,请重置信息!n stu.zhku_status=1; fseek(fp,-sizeof(StuType),SEEK_CUR);/把文件的位置指针从当起始点开始,移动指定位移量的字节数。成功返回0,失败返回非0 fwrite(& else
10、无此学号的学生! clearerr(fp); do getchar(); while(a! break;2fclose(fp); remove(input.dat if(fp=fopen(rb+)=NULL)wb+ printf(打开文件失败! system(PAUSE exit(1); doa=getch();while(a!return; break; FILE *fpTmp; if(fpTmp=fopen(xuesheng_tmp.datwb)=NULL) /打开文件xueshneg_tmp.dat失败打开文件xueshneg_tmp.dat失败! system( exit(2); /读
11、入信息 if(stu.zhku_status=0)stu,sizeof(StuType),1,fpTmp); /写入信息 /继续读入信息 fclose(fp); fclose(fpTmp); /关闭文件 remove( /删除文件 rename( /更改文件名 if(fp=fopen( printf( exit(3); char zhku_number10;nnnn *按ESC返回主菜单*nn输入要修改的学生的学号:,zhku_number); while (! if (strcmp(stu.zhku_number,zhku_number)=0 &stu.zhku_status=0) brea
12、k; if (!, stu.zhku_number,stu.zhku_name,stu.zhku_address);n输入修改后的数据:n学生学号: scanf(n学生姓名:n籍贯:nn 修改成功,请重置信息!n 无此学号的学生!nnn clearerr(fp); char SH_tag; char SH; char SH_number10; char SH_name10; char wxw_address20;do 1.按学号查询nn 2.按姓名查询nn 3.按籍贯查询nnprintf(nn *按ESC返回主菜单*nn 请选择:nn /getchar();if(a=getch()=27) S
13、H); while(SH3 输入错误,请输入13的数: switch(SH) nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn输入要查询的学生的学号:,SH_number); rewind(fp); while(! if(strcmp(stu.zhku_number,SH_number)=0 & break; fread(& if(! while(! if(feof(fp)break; if (strcmp(stu.zhku_number,SH_number)=0 & ,stu.zhku_name,stu.zhku_number,stu.zhku_address); else 无此人的籍贯信息! clearerr(fp); break; nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn输入要查询的学生的姓名:,SH_name); if(strcmp(stu.zhku_name,SH_name)=0 if (strcmp(stu.zhku_name,SH_name)=0 break; printf ( n输入要查询的学生的籍贯:,wxw_address); if (strcmp(stu.zhku_address,wxw_address)=0stu.zhku_status=0 )break; if(! rewind(fp);stu,sizeof(S
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1