您好,欢迎访问三七文档
1/25学生信息管理程序一、设计目的:使用结构体数组结构实现简单的学生信息管理功能,要求具有数据输入、数据输出、数组排序、元素插入、元素删除、查询信息等功能。程序最多容纳60名学生的记录。二、设计要求:1、intInput(void);//使用程序中一个空白结构体,输入一名学生的个人及学习信息信息。此功能区返回一个值记录程序存储学生记录的数量*/2、voidChange_record(void);//修改学生的记录选项。3、voidDelete_record(void);//删除学生记录选项。4、voidSort_record(void);//根据学生某项信息排序学生记录选项。5、voidQuery_record(void);//查询学生记录选项。6、voidDisplay(void);//显示出当前程序存储的所有学生信息选项。7、voidAdd_from_text(inte);//从文本中提取学生记录输入程序进行处理。8、voidWrite_to_text(void);//将当前程序中存储的学生记录写入一个文本文件中。2/259、voidEnding(void);//退出选项。三、总体设计:1、主函数模块:主函数设计较为简单,主要是使用switch语句通过选择结构将整个程序能够实现的功能提示用户选择。具体流程图:主函数main()插入函数Input()修改函数Change_record();删除函数Delete_record()排序函数Sort_record()展示函数Display()提取文本函数Add_from_text()写入文本函数Write_to_text()退出函数Ending()调用菜单模块中的函数提示用户正确输入选择信息结果桌面查询函数Query_record()3/25主函数代码:intmain(void)//对主函数的定义。{n=0;for(i=0;iN;i++){strcpy(stu[i].name,\0);stu[i].num=0;stu[i].score=0;}for(;;)//通过for语句实现使用户自由决定是否重复使用此程序。{switch(Menu_select1())//使用switch语句调用用户指定菜单项对应的函数。{case1:Input(n);//插入学生记录函数。for(i=0,n=0;iN;i++){if(stu[i].num!=0)n++;}break;case2:Change_record();//修改学生的记录函数。break;case3:Delete_record();//删除学生记录函数。break;case4:Sort_record();//排序函数。break;case5:Query_record();//查询函数。break;case6:Dispaly();//展示函数。break;case7:printf(请输入文件的路径:);scanf(%s,name0);printf(请输入此文本中有多少名学生的记录:);scanf(%d,&j);Add_from_text(j,name0);//从文本中添加学生记录的函数。n+=j;break;case8:printf(请输入文件的路径:);scanf(%s,name0);Write_to_text();//将学生记录写入文本的函数。break;case9://结束程序使用界面选项。Ending();break;default:continue;//菜单循环显示。}system(cls);}system(pause);//防止程序运行窗口闪退。return0;}4/252、菜单模块:菜单模块包括主菜单和部分功能中要调用的附属菜单,作用是向用户说明其输入的选择信息将使程序实现什么样的功能。具体流程图:3、功能模块功能模块的设计就是通过编写多个的函数对应程序所要求实现的功能。函数在主函数中将被编号,使用户向主菜单1:(switch语句调用)菜单7:提示用户输入查询某信息的选择菜单8:提示用户输入选择信息调用以某项信息排序功能菜单9:提示用户输入选择信息调用升序或降序排序功能结果结束菜单菜单2、4、6:(分别在修改、查询、删除功能中被调用)提示用户输入某信息锁定某位学生菜单3:提示用户输入修改某信息的选择菜单5:提示用户输入删除某信息的选择5/25程序输入的编号就能调用相应的函数体现程序的功能。具体流程图:主菜单显示插入学生记录功能修改学生记录功能删除学生记录功能排序学生记录功能查询学生记录功能显示全部学生记录功能可从文本文件中提取学生记录功能可将学生记录写入文本文件中保存功能退出程序功能寻找锁定学生记录功能提示选择具体的运用某功能,如修改、查询、删除某项信息、升序或降序排列、输入提取或写入文件的路径等等结果显示或操作是否成功的说明返回桌面6/25四、详细设计及源代码:#includestdio.h#includewindows.h//提供system();语句。#includestring.h//提供strlen()函数。#defineN60//定义全局常量N作为结构体数组stu[]下标。intb,c,num0,n,i=0,j=0;charname0[40];/*将程序中多次定义的标识符设置为全局变量。*/structstudent{charname[40];intnum;intscore;}stu[N];intMenu_select1(void);intMenu_select2(void);intMenu_select3(void);intMenu_select4(void);intMenu_select5(void);intMenu_select6(void);intMenu_select7(void);intMenu_select8(void);intMenu_select9(void);//声明程序中用到的多种菜单函数。structstudent*point1,*point2;//全局定义程序中多次用到得结构体指针变量。int(*pot2)(void)=Menu_select2;int(*pot4)(void)=Menu_select4;int(*pot6)(void)=Menu_select6;int(*pot8)(void)=Menu_select8;//定义指向菜单函数的指针。intjudgement(void);intjudgement_small(void);//声明程序要调用的两个判断特殊情况的函数。FILE*fp;//定义指向文件型数据的指针变量。voidChange_service(void);voidQuery_service(void);voidDelete_service(void);void(*ser1)(void)=Change_service;void(*ser2)(void)=Delete_service;void(*ser3)(void)=Query_service;//定义指向在有特定功能的函数内部使用的函数的指针。voidSort_service1(intpo);voidSort_service2(intpo);//声明两个在有排序功能的函数中腰使用的函数。7/25voidswap(structstudent*po1,structstudent*po2);//对交换函数的声明。voidEnding(void);//对有结束功能的函数的声明。voidfind(int(*p)(void),void(*q)(void));//对一个形参是指向函数的指针的函数的声明。voidInput(intn)//对有插入学生记录功能的函数的定义。{printf(请输入学生姓名:);scanf(%s,&stu[n].name);printf(请输入学生序号:);stu[n].num=judgement();printf(请输入学生信息:);scanf(%d,&stu[n].score);system(cls);//此语句执行后将清除运行窗口显示的结果。}voidChange_record(void)//对有修改学生记录功能的函数的定义。{find(pot2,ser1);//在函数内部调用函数。}voidDelete_record(void)//对有删除学生记录功能的函数的定义。{find(pot4,ser2);}voidSort_record(void)//对有排序学生记录功能的函数的定义。{j=Menu_select8();//通过菜单函数的返回值提供用户的选择信息来执行用户选定的功能for(;judgement_small()0;)//for语句中的判断用判断函数处理后以提示是否输入错误。{if(j==1){j=Menu_select9();Sort_service1(j);//通过菜单函数的返回值作为另一个函数的实参来执行用户选定的功能。break;}elseif(j==2){j=Menu_select9();Sort_service2(j);break;}elsecontinue;8/25}}voidQuery_record(void)//对有查询学生记录功能的函数的定义。{find(pot6,ser3);}voidDispaly(void)//对有显示全部学生记录功能的函数的定义。{for(i=0;in;i++)//for语句打印出当时的所有学生记录。{printf(第%d位学生姓名为%s\n,i+1,stu[i].name);printf(班内序号为%d\n,stu[i].num);printf(学习信息为%d\n\n,stu[i].score);}system(pause);//防止运行窗口闪退。}voidEnding(void)//对有退出功能的函数的定义。{system(cls);printf(\n\t************************************************************\n\n\n\n);printf(\n\t\t\t欢迎下次继续使用,再见!\n\n);printf(\n\n\n\t************************************************************\n\n\t);exit(0);//正常退出程序。}voidAdd_from_text(inte,charch)//对有可从文本文件中提取学生记录的函数的定义。{fp=fopen(name0,r);//使指针指向文件。if((fp=fopen(name0,r))==NULL)//判断指针所指向的文件是否存在,不存在退出此函数。{printf(无法找到路径为%s的文本文件。\n,name0);system(pause);return;}else//存在则从此文件中提取学生记录。{for(i=n;i(n+e+1);i++){fscanf(fp,%s%d*%d,&stu[i].name,&stu[i].num,&stu[i].score);9/25}printf(已提取出文本文件名称为%s中的所有学生记录!\n,name0);system(pause);}fclose(fp);//关闭文本文件,即指针fp不再指向任何文件。}voidWrite_to_text(void)//对可将程序中存储并处理后的学生记录输出至一个文本文件。{fp=fopen(name0,w);//使指针指向文件。if((fp=fopen(name0,w))==NULL)//判断指针所指向的文件是否存在,不存在退出此函数。{printf(无法找到名为%d的文本文件。\n,name0);system(pause);return;}else//存在则将程序中储存的学生记录写入该文件。{fprintf(fp,姓名\t\t\t\t\t*班内序号\t*学习信息*\n);for(i=0;in;i++){fprintf(fp,%-40s*%-14d*
本文标题:C语言课程设计报告
链接地址:https://www.777doc.com/doc-1508178 .html