ImageVerifierCode 换一换
格式:DOC , 页数:17 ,大小:330.04KB ,
资源ID:9888381      下载积分:8 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/9888381.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(C语言课程设计学生管理系统学生成绩管理系统.doc)为本站上传会员【人****来】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

C语言课程设计学生管理系统学生成绩管理系统.doc

1、淮北师范大学 程序设计课程设计 学 生 管 理 系 统  ———学生成绩管理系统 学 院 计算机科学与技术 专 业 计算机科学与技术(师范) 学 号 *********** 学 生 姓 名 * * * 指导教师姓名 * * * 2010年12月 28 日 16 / 17 一、设计目的与内容 (1)实验目的 l 进一步巩固和复习C程序设计的基础知识。 l 培养学生结构化程序、模块化程序设计的方法

2、和能力。 l 提高学生调试程序的技巧和软件设计的能力。 l 提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。 l 了解软件的编制过程。 (2)实验内容 1) 实现对学生信息的查找、添加、删除、修改、浏览、保存、从文件读取功能。 2) 使用结构体对学生信息的存储。 3) 使用链表实现对学生信息的查找、添加、删除、修改、浏览等操作。 4) 使用文件完成数据的存储与读取,要求每次运行某个模块时将数据读入结构体中,并 提供保存选项,将结构体中的数据保存在文件中。 二、算法的基本思想 (1)数据结构 学生成绩信息: typedef struct stud

3、entscore { char name[10]; //定义姓名的字符数组 char num[20]; //定义学号的字符数组 struct subject {char subname[20];//定义学科名的字符数组 float score; //保存学生各科成绩 }sub[5]; //共五门课 double sum; //总分 struct studentscore *next; }STUCORE; (2)本系统涉及的知识点 结构体、数组、循环、函数、指针、链表、文件操作。 (3)功

4、能要求功能模块 1、建立学生信息,每个学生的信息包括:学号、姓名、性别、班级、学院 2、用链表的形式对学生信息分别进行查找、添加、删除、修改 3、结果保存在磁盘上 (4)功能模块 学生管理系统 1.文件操作 2.学生基本信息管理 3.学生成绩信息管理 4.退出 文件操作 1.从文件中读取信息 2.学生信息存入文件 3.返回 学生成绩信息管理 1. 查找成绩信息 2. 添加成绩信息 3. 删除成绩信息 4. 修改成绩信息 5. 返回 修改成绩信息 删除成绩信息 添加成绩

5、信息 查找成绩信息 1.按学号查找 2.按姓名查找 3.返回 学生信息存入文件 1.保存学生基本信息 2.保存学生成绩信息 从文件中读取信息 1.读取学生基本信息 2.读取学生成绩信息 (4)算法功能描述 ①总体功能说明: 本系统可以做到对1.学生信息:学号、姓名、性别、学院、班级。2.学生成绩信息:学号、姓名、一名学生五门不同学科的学科名及该科成绩。分别进行添加、修改、查找、删除、保存、载入功能。 ②学生成绩信息管理功能说明: 可以添加学生学号、姓名、及对一名学生五门不同学科的学科名及该科成绩。并可以通过对输入的学生成绩信息进

6、行修改、删除、保存、载入功能并通过学号和姓名两种方式查找,并且对同名的学生也可以进行区分。并且会保持学好的一致性,保证任意两名学生不会出现学号相重复的情况。 三、主要功能模块流程图(按姓名查找信息的流程图) Start Scanf(“%s”,no) if(strcmp(p->name,no)==0) while(p!=NULL) 0

7、 1 Printf(“查无此人”) Printf(“所有信息”) END 按姓名查找流程图 四、 系统测试 1.主程序界面 首先进入1.文件管理操作。建立单链表。 2.文件管理操作 选择读取的文件(第一次运行时因文件未建立只有在读取文件

8、后才能执行保存文件) 读入文件后就可选择进入的系统。 选择2进入学生基本信息管理系统; 选择3进入学生成绩信息管理系统。 3.学生成绩信息管理 选择1:查询成绩信息。 选择2:添加成绩信息。 选择3:删除成绩信息。 选择4:修改成绩信息。 选择5:返回。 A. 查询成绩信息 选择1:按学号查询成绩信息。 选择2:按姓名查询成绩信息。 可以查找到同名学生的信息。 B. 添加成绩信息 如图添加学生成绩信息。继续添加输入y否则输入n。添加完成后请去往文件管理保存! C. 删除成绩信息 如图删除学生基本信息。继续删除其它学生输入y否则输入n。删

9、除完成后请去往文件管理保存! D. 修改成绩信息 如图修改学生基本信息。继续修改其它学生输入y否则输入n。修改完成后请去往文件管理保存! 五、 结论 通过这次课程设计,我感觉到要真正做出一个程序并不很容易,但只要用心去做,总会有收获,特别是当我遇到 一个问题,想办法去解决,最后终于找到方法时,心里的那份喜悦之情真是难以形容。编写程序中遇到问题再所难免,应耐心探究其中的原因,从出现问题的地方起,并联系前后程序,仔细推敲,逐个排查。直到最终搞清为止。我对于链表也有了更深层次的理解,尤其是采用动态内存分配malloc函数的使用。 但我的程序仍让不够完美,因为我修改信息时还不能对学号进行

10、判断,就是说如果修改时使两个学生学号相同就一并保存下来。在查询中可以一并查询出来,但删除修改操作需要按录入顺序捉个操作。这是该程序的不足。而且,在姓名查找中必不能实现模糊查找功能。也就是说,不能对某同学姓名中的一部分进行判断进而进行查找。 这次课程设计能够顺利完成要首先感谢韩玲老师对我的悉心教导,她在我整个编程中给予了我很大帮助。还感谢王保华老师为我解释了查询中链表的循环,陈美荣老师为我讲解了动态内存分配malloc函数。在此我要感谢所有为我的课程设计付出心血的老师们! 参考文献: 谭浩强,《C程序设计(第二版)》,清华大学出版社。 严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出

11、版社。 六、 源程序及系统文件使用说明 学生成绩信息管理中各模块的功能说明程序代码设计 一:结构体: typedef struct studentscore { char name[10]; char num[20]; struct subject {char subname[20]; float score; }sub[5]; //保存学生各科成绩 double sum; //总分 struct studentscore *next; }STUCORE; 二:添加学生成绩信息函数:(void add_score

12、)) 1)函数原形:void add_score() 2)功 能:采用动态内存分配malloc函数和链表结构。利用do while、while循环结构strcpy函数依次输入学生学号、姓名、及对一名学生五门不同学科的学科名及该科成绩。将信息保存在内存中建立的链表里。 3)变量及类型: STUCORE *stu,*p; 定义结构体指针 char k; 用来接收输入的(y/n)以便通过do while判断是否继续添加信息 int flag; 定义一个整型变量来判断所添加的学生学号是否已经存在文件中,保证学号唯一性 p=head_2; 将结构体下定义的头指针

13、head_2赋给p 4)说明:执行完输入函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。并在函数调用结束时利用system("cls")执行清屏操作。添加完成后需要去往文件操作保存。 void add_score()//添加学生成绩信息 {STUCORE *stu,*p;char k;p=head_2; int flag=0; do {stu=( STUCORE *) malloc(sizeof(STUCORE)); printf("输入学生的成绩信息:\n"); whil

14、e(flag==0){printf("请输入学生学号:");scanf("%s",no);flag=Judge(no);} strcpy(stu->num,no);printf("请输入学生姓名:");scanf("%s",stu->name); printf("请输入第一门课学科名:");scanf("%s",stu->sub[0].subname); printf("请输入该课成绩:");scanf("%f",&stu->sub[0].score); printf("请输入第二门课学科名:");scanf("%s",stu->sub[1].subname); printf(

15、"请输入该课成绩:");scanf("%f",&stu->sub[1].score); printf("请输入第三门课学科名:");scanf("%s",stu->sub[2].subname); printf("请输入该课成绩:");scanf("%f",&stu->sub[2].score); printf("请输入第四门课学科名:");scanf("%s",stu->sub[3].subname); printf("请输入该课成绩:");scanf("%f",&stu->sub[3].score); printf("请输入第五门课学科名:");scanf("%s",stu->s

16、ub[4].subname); printf("请输入该课成绩:");scanf("%f",&stu->sub[4].score); stu->sum=stu->sub[1].score+stu->sub[2].score+stu->sub[3].score+stu->sub[4].score+stu->sub[0].score; getchar();printf("\t\t输入学生信息完成。\n"); while(p->next!=NULL)p=p->next; p->next=stu;p=stu;p->next=NULL; printf("\n添加完成后请去往文件管理保存!\n

17、\n是否继续添加学生信息?(y/n):\n"); }while((k=getchar())=='y'); getchar(); system("cls");} 三:删除学生成绩信息函数(void del_score()) 1)函数原形:void del_score() 2)功 能:利用strcmp函数、do while、while循环结构通过学号找到要删除的学生并利用链表执行删除操作。将信息保存在内存中建立的链表里。 3)变量及类型: STUCORE *p,*q; 定义结构体指针 char no[10]; 定义输入的待比较变量 char k,ch

18、 用来接收输入的(y/n)以便通过do while判断是否删除信息 p=head_2; 将结构体下定义的头指针head_2赋给p 4)说明:执行完删除函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。并在函数调用结束时利用system("cls")执行清屏操作。删除完成后需要去往文件操作保存。 void del_score()//删除学生成绩信息 { STUCORE *p,*q;char no[10];char k,ch; Do { p=head_2;printf("\

19、t\t删除学生的详细资料 \n\n\n"); printf("请输入要删除学生的学号:");scanf("%s",no); while(strcmp(p->num,no)!=0&&p->next!=NULL) {q=p; p=p->next;} if(strcmp((p->num),no)==0) {printf("要删除的学生成绩信息:"); printf("学号:%s\n",p->num);printf("姓名:%s\n",p->name); printf("%s 成绩: %f\n",p->sub[0].subname,p->sub[0].score); pri

20、ntf("%s 成绩: %f\n",p->sub[1].subname,p->sub[1].score); printf("%s 成绩: %f\n",p->sub[2].subname,p->sub[2].score); printf("%s 成绩: %f\n",p->sub[3].subname,p->sub[3].score); printf("%s 成绩: %f\n",p->sub[4].subname,p->sub[4].score); printf("总分:%lf\n",p->sum);getchar(); printf("\n确定删除吗?y/n?\n\n");ch=get

21、char(); if(ch=='y'){q->next=p->next;printf("\n\t\t\t已删除该学生\n\n");}} else printf("\n\t\t\t没有该学生\n\n");getchar(); printf("\n删除完成后请去往文件管理保存!\n\n是否继续删除其它学生信息?(y/n?):\n");k=getchar();}while(k=='y'); getchar();system("cls");} 四:修改学生成绩信息函数(void modify_score()) 1)函数原形:void modify_score() 2)功 能:利用strcm

22、p函数、do while、while循环结构通过学号找到要修改的学生并利用链表执行修改操作。并将修改后的信息保存在内存中建立的链表里。 3)变量及类型: STUCORE *p; 定义结构体指针 char no[10]; 定义输入的待比较变量 char k; 用来接收输入的(y/n)以便通过do while判断是否继续修改信息 p=head_2; 将结构体下定义的头指针head_2赋给p 4)说明:执行完修改函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()

23、函数。并在函数调用结束时利用system("cls")执行清屏操作。修改完成后需要去往文件操作保存。 void modify_score()//修改学生成绩信息 {system("cls");STUCORE *p;char no[30];char k; do {p=head_2;printf("\t\t修改学生的详细资料\n"); printf("输入学生学号:");scanf("%s",no); while(strcmp(p->num,no)!=0&&p->next!=NULL){ p=p->next;} if(strcmp((p->num),no)==0) {printf(

24、"要修改的学生的详细资料:\n"); printf("学号:%s\n",p->num);printf("姓名:%s\n",p->name); printf("%s 成绩: %f\n",p->sub[0].subname,p->sub[0].score); printf("%s 成绩: %f\n",p->sub[1].subname,p->sub[1].score); printf("%s 成绩: %f\n",p->sub[2].subname,p->sub[2].score); printf("%s 成绩: %f\n",p->sub[3].subname,p->sub[3].scor

25、e); printf("%s 成绩: %f\n",p->sub[4].subname,p->sub[4].score); printf("总分:%lf\n",p->sum); printf("\n\t\t********根据提示输入修改后的信息**********\n\n"); printf("输入新的学生的成绩信息:\n"); printf("请输入新的学生学号:");scanf("%s",p->num); printf("请输入新的学生姓名:");scanf("%s",p->name); printf("请输入第一门课学科名:");scanf("%s",stu->sub[0

26、].subname); printf("请输入该课成绩:");scanf("%f",&stu->sub[0].score); printf("请输入第二门课学科名:");scanf("%s",stu->sub[1].subname); printf("请输入该课成绩:");scanf("%f",&stu->sub[1].score); printf("请输入第三门课学科名:");scanf("%s",stu->sub[2].subname); printf("请输入该课成绩:");scanf("%f",&stu->sub[2].score); printf("请输入第四门课学科

27、名:");scanf("%s",stu->sub[3].subname); printf("请输入该课成绩:");scanf("%f",&stu->sub[3].score); printf("请输入第五门课学科名:"); scanf("%s",stu->sub[4].subname); printf("请输入该课成绩:");scanf("%f",&stu->sub[4].score); stu->sum=stu->sub[1].score+stu->sub[2].score+stu->sub[3].score+stu->sub[4].score+stu->sub[0].score;}

28、 else printf("\t\t没有此学生信息!\n\n"); getchar();printf("\n修改完成后请去往文件管理保存!\n\n是否继修改学生信息?(y/n):\n");k=getchar();}while(k=='y'); getchar();system("cls");} 五:按学号查找学生成绩信息函数(void search_num()) 1)函数原形:void search_num() 2)功 能:利用strcmp函数、do while、while循环结构通过学号找到要查找的学生并将该学生成绩信息显示出来。 3)变量及类型: STUCORE

29、 *p; 定义结构体指针 char no[10]; 定义输入的待比较变量 char k;用来接收输入的(y/n)以便通过do while判断是否继续利用学号查询信息 int flag; 定义一个整型变量来判断所查找的学生是否存在文件中 p=head_2; 将结构体下定义的头指针head_2赋给p 4)说明:执行完查询函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。并在函数调用结束时利用system("cls")执行清屏操作。 void search_num

30、)//按学号查找学生成绩信息 {STUCORE *p;char no[10];char k;int flag; do {p=head_2;flag=0;printf("请输入要查找学生的学号:");scanf("%s",no); while(p!=NULL) if (strcmp(p->num,no)==0) {printf("要查询的学生详细资料:\n"); printf("学号:%s\n",p->num);printf("姓名:%s\n",p->name); printf("%s 成绩: %f\n",p->sub[0].subname,p->sub[0].score);

31、 printf("%s 成绩: %f\n",p->sub[1].subname,p->sub[1].score); printf("%s 成绩: %f\n",p->sub[2].subname,p->sub[2].score); printf("%s 成绩: %f\n",p->sub[3].subname,p->sub[3].score); printf("%s 成绩: %f\n",p->sub[4].subname,p->sub[4].score); printf("总分:%lf\n",p->sum);p=p->next;flag=1;} else p=p->next; if

32、flag==0) printf("\n\t\t\t没有该学生\n\n");getchar();printf("\n是否继续查找其它学生信息?y/n?\n");k=getchar();}while(k=='y'); getchar();printf("\n\t\t查看完毕!按任意键返回");getchar();system("cls");} 六:按姓名查找学生成绩函数(void search_name ()) 1)函数原形:void search_name() 2)功 能:利用strcmp函数、do while、while循环结构通过姓名找到要查找的学生并将该学生成绩信息显示出来。(包

33、括同名的学生) 3)变量及类型: STUCORE *p; 定义结构体指针 char no[10]; 定义输入的待比较变量 char k;用来接收输入的(y/n)以便通过do while判断是否继续利用姓名查询信息 int flag; 定义一个整型变量来判断所查找的学生是否存在文件中 p=head_2; 将结构体下定义的头指针head_2赋给p 4)说明:执行完查询函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。并在函数调用结束时利用system(

34、"cls")执行清屏操作。 void search_name()//按姓名查找学生成绩 {STUCORE *p;char no[10];char k;int flag; do {p=head_2;flag=0;printf("请输入要查找学生的姓名:");scanf("%s",no); while(p!=NULL) if (strcmp(p->name,no)==0) {printf("要查询的学生详细资料:\n"); printf("学号:%s\n",p->num);printf("姓名:%s\n",p->name); printf("%s 成绩: %f\n",p->sub

35、[0].subname,p->sub[0].score); printf("%s 成绩: %f\n",p->sub[1].subname,p->sub[1].score); printf("%s 成绩: %f\n",p->sub[2].subname,p->sub[2].score); printf("%s 成绩: %f\n",p->sub[3].subname,p->sub[3].score); printf("%s 成绩: %f\n",p->sub[4].subname,p->sub[4].score); printf("总分:%lf\n",p->sum);p=p->next;f

36、lag=1;} else p=p->next; if(flag==0) printf("\n\t\t\t没有该学生\n\n");getchar();printf("\n是否继续查找其它学生信息?y/n?\n");k=getchar();}while(k=='y'); getchar();printf("\n\t\t查看完毕!按任意键返回");getchar();system("cls");} 七:查找学生成绩信息函数 void search_score()//查找学生成绩信息 {system("cls");int a; printf("\t\t****************

37、\n"); printf("\t\t**************************************\n"); printf("\t\t\t1:按学号查找。\n");printf("\t\t\t2:按姓名查找。\n");printf("\t\t\t3:退出。\n"); printf("\t\t**************************************\n"); printf("\t\t**************************************\n"); printf("\n\t\t输入一个有效

38、的数字,选择你要做的操作:\n");scanf("%d",&a); switch(a) {case 1:search_num();break;case 2:search_name();break;case 3:score();break; default:printf("\t\t\t错误的菜单选项\n\n");break;}} 八:学生成绩管理函数 void score()//学生成绩管理 {system("cls");int a; printf("\t\t*************学生管理系统**************\n"); printf("\t\t**********

39、\n"); printf("\t\t\t1:查找成绩信息。\n");printf("\t\t\t2:添加成绩信息。\n"); printf("\t\t\t3:删除成绩信息。\n");printf("\t\t\t4:修改成绩信息。\n"); printf("\t\t\t5:返回。\n"); printf("\t\t**************************************\n"); printf("\t\t**************************************\n");printf("\n\

40、t\t输入一个有效的数字,选择你要做的操作:\n");scanf("%d",&a); switch(a) {case 1:search_score();break;case 2:add_score();break; case 3:del_score();break;case 4:modify_score();break; case 5:main();break;default:printf("\t\t\t错误的菜单选项\n\n");break;}} 九:文件载入函数(void file3(void)) 1)函数原形:void file3(void) 2)功 能:采用动态内存分配m

41、alloc函数和链表结构。建立打开“student.dat”文件保存数据。并建立头指针为head_2的单链表。 3)变量及类型: STUCORE *stu,*p; 定义结构体指针 FILE *fp; 定义文件指针 4)说明:执行操作前一定要先执行void file3(void) 以通过动态内存分配建立打开“student.dat”文件保存数据。并建立头指针为head_2的单链表。 void file3(void)//文件载入 {STUCORE *stu,*p;FILE *fp;stu=( STUCORE *) malloc(sizeof(STUCORE));

42、 if((fp=fopen("student.dat","rb"))==NULL) {printf("\t\t\t暂无学生信息,请添加!\n\n");head_2=stu;head_2->next=NULL;} else {head_2=p=stu; do {if(fread(stu,sizeof(STUCORE),1,fp)==1) {p->next=stu;p=p->next;stu=( STUCORE *) malloc(sizeof(STUCORE));} }while(!feof(fp));p->next=NULL;}} 十:文件保存写入函数(void file4(

43、void)) 1)函数原形:void file4(void) 2)功 能:将链表内存中的数据保存写入到“student.dat”文件中。 3)变量及类型: STUCORE *stu,*p; 定义结构体指针 FILE *fp; 定义文件指针 4)说明:执行添加,删除,修改操作后一定要执行void file4(void) 以将链表内存中的数据保存写入到“student.dat”文件中。 void file4(void) //文件保存写入 {STUCORE *p;FILE *fp; if((fp=fopen("student.dat","wb+"))==NULL

44、) printf("\t\t\t文件无法正常打开!\n\n"); else {p=head_2; do {fwrite(p,sizeof(STUCORE),1,fp); p=p->next;}while(p!=NULL);} fclose(fp);} 十一:判断学号唯一函数 1)函数原形:void search_name() 2)功 能:利用while循环结构和if语句通过strcmp比较输入的学号与文件中已经保存过的学号信息,并通过返回(1/0)来选择是否允许该学号添加从而达到学号的唯一性。 3)变量及类型: STUCORE *p; 定义结构体指针

45、 p=head_2; 将结构体下定义的头指针head_2赋给p int Judge(char no[10]) {STUCORE *p; p=head_2; while(strcmp(p->num,no)!=0&&p->next!=NULL) {p=p->next;} if(strcmp((p->num),no)==0) {printf("学号输入失败,该学号已存在,请重新输入!\n");return (0);} return (1);} 十二:文件管理 void file(void)//文件管理 {system("cls");int a; print

46、f("\t\t*************文件管理*****************\n"); printf("\t\t**************************************\n"); printf("\t\t\t1:读取学生信息文件。\n");printf("\t\t\t2:学生信息文件保存。\n"); printf("\t\t\t3:读取学生成绩文件。\n");printf("\t\t\t4:学生信息文件保存。\n"); printf("\t\t\t5:返回。\n"); printf("\t\t*********************************

47、\n"); printf("\t\t**************************************\n"); printf("\n\t\t输入一个有效的数字,选择你要做的操作:\n");scanf("%d",&a); switch(a) {case 1:file1();break;case 2:file2();break; case 3:file3();break;case 4:file4();break; case 5:main();break;default:printf("\t\t错误的菜单选项");break;}} 十三:主函数 void mai

48、n()//主函数 {int a; while(1)//无限循环 {printf("\t\t*************学生管理系统**************\n"); printf("\t\t\t1:文件管理操作。\n");printf("\t\t\t2:学生基本信息管理。\n"); printf("\t\t\t3:学生成绩信息管理。\n");printf("\t\t\t4:退出。\n"); printf("\t\t**************************************\n"); printf("\n\t\t输入一个有效的数字,选择你要做的操作:\n"); scanf("%d",&a); switch(a) {case 1:file();break;case 2:message();break; case 3:score();break;case 4:printf("\t\t退出系统成功\n\n");exit(0);break; default:printf("\t\t\t错误的菜单选项\n\n");break; } }}

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服