您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > C语言课程设计--学生成绩管理系统
中中中国国国地地地质质质大大大学学学C语言课程设计院系:工程学院姓名:、、俊学号:班号:051163指导老师:日期:2016-12-4目录一、题目要求二、需求分析三、总体设计四、详细设计1.菜单函数和主函数2.各功能模块设计(1)输入模块(2)追加模块(3)修改模块(4)删除模块(5)修改成绩模块(6)排序模块(7)浏览模块3.公共函数(1)保存函数(2)加载函数(3)学号输入函数(4)输入三科成绩函数(5)求总分函数(6)输入一个记录的函数(7)修改成绩函数(8)修改记录函数(9)显示数据结构项目函数(10)显示一个记录的函数五、上机操作六、总结学生成绩管理系统一.题目要求对在校某班学生几门课程的考试成绩进行统一管理。每个学生记录包括学号、姓名、年龄、数学、英语、物理成绩,默认以学号为序存放。(1)建立一个文件,以班为单位存储学生记录。(2)将允许的操作分为四种,以A、B、C、D、E、F为标志(若设置菜单操作更佳):A:插入一个新的学生记录(录入学生信息);B:修改学生记录;C:删除一个学生记录;D:登记成绩;E:修改成绩;F:浏览全班成绩。(3)计算学生的总成绩。(4)按学号排序输出全班成绩表。二.需求分析学生记录用文件存储,因而要提供文件的输入、输出等操作;要实现插入一个新生的学生记录,因而要提供文件的插入操作;要实现学生记录的修改和删除,以及登记成绩修改成绩,因而要提供文件记录的修改和删除操作;要浏览全班成绩,故要提供显示操作;计算学生总成绩需要提供简单的统计操作;要按学号排序输出全班成绩表,因而要提供排序操作;另外还应提供键盘式选择菜单实现功能选择。三.总体设计根据上面的需求分析,可以将这个系统的设计分为8个模块,数据输入,添加数据,修改数据,删除数据,修改成绩,学号排序,浏览成绩,退出模块.学生成绩管理系统数据输入添加数据修改数据删除数据修改成绩学号排序浏览成绩退出模块四.详细设计1.菜单函数和主函数将各个功能模块设置为菜单选项,方便调用,且执行完每部分功能模块后能够方便返回到系统界面.[流程图]输入n,判断n是否是A-HY根据n的值调用各功能模块函数voidmenu()/*主界面*/{intw1;charn;/*.变量n保存选择菜单数字,w1判断输入的数字是否在功能菜单对应数字范围*/do{puts(\t\t****************MENU****************\n\n);puts(\t\t\t\tA.Enternewdata);puts(\t\t\t\tB.Additiondata);puts(\t\t\t\tC.Modifydata);puts(\t\t\t\tD.Deletedata);puts(\t\t\t\tE.Modifyscore);puts(\t\t\t\tF.Orderbynumber);puts(\t\t\t\tG.Browseall);puts(\t\t\t\tH.Exit);puts(\n\n\t\t************************************\n);printf(Choiceyournumber(A-H):[]\b\b);n=getchar();printf(\n);if(n'A'||n'H')w1=1;/*对选择的数字作判断*/elsew1=0;}while(w1==1);switch(n)/*选择功能*/{case'A':enter();break;/*输入模块*/case'B':add();break;/*添加模块*/case'C':modify();break;/*修改数据模块*/case'D':del();break;/*删除模块*/case'E':modify_score();break;/*修改成绩模块*/case'F':order();break;/*排序模块*/case'G':browse();break;/*浏览模块*/case'H':exit(0);/*退出模块*/显示一系列功能选项N}}main()/*主函数*/{menu();}2.各功能模块设计(1)输入模块[数据分析]单看各数据信息,学号﹑年龄以及数学﹑英语﹑物理各科成绩和总分均是整型,姓名可以采用字符型数组.数据信息存放在文件中,一条记录对应一个学生,既符合习惯也方便信息管理.把学生的学号﹑姓名﹑年龄﹑各科成绩及总分作为结构体成员,存放若干个学生信息就用结构体数组.structstudent{intnum;charname[20];intage;intMath;intEnglish;intPhysical;longintsum;}stu[N];/*stu[N]中每个数组元素对应一个学生*/[注意]stu[N]中的N为学生个数,程序中采用宏定义的方式,可以随时在源程序宏定义中修改,本程序宏定义#defineN30[流程图]输入用户要输入学生记录的个数ni从0到n-1调用输入函数input(i)Y调用保存函数save(n)[程序]/**********************输入模块********************/voidenter()/*输入模块*/{inti,n;printf(Howmanystudents(1-%d)?:,N);i!=0scanf(%d,&n);/*要输入的记录个数*/printf(\nEnterdatanow\n\n);for(i=0;in;i++){printf(\nInput%dthstudentrecord.\n,i+1);input(i);/*调用输入函数*/}if(i!=0)save(n);/*调用保存函数*/printf_back();/*一个任务结束时让用户选择是浏览还是返回*/}(2)追加模块[需求分析]该模块的功能是用户需要增加新的学生记录,请从键盘输入并逐条写到原来的输入文件中.[流程图][程序]/***************************添加模块**************************/voidadd()/*添加模块*/{inti,n,m,k;FILE*fp;n=load();printf(Howmanystudentsareyouwanttoadd(1-%d)?:,N-n);scanf(%d,&m);/*输入要添加的记录个数*/k=m+n;for(i=n;ik;i++){printf(\nInput%dthstudentrecord.\n,i+1);input(i);/*调用输入函数*/}调用加载函数n=load();并计算可以记录个数n输入用户要添加学生记录的个数mK=m+ni从n到k调用输入函数input(i)保存添加的记录if((fp=fopen(score.txt,ab))==NULL)/*以ab方式打开文件,添加保存*/{printf(Cannotopenfile.\n);}for(i=n;ik;i++)/*输出到文件*/if(fwrite(&stu[i],sizeof(structstudent),1,fp)!=1)printf(filewriteerror.\n);fclose(fp);printf_back();/*一个任务结束时的选择浏览还是返回*/}(3)修改模块[需求分析]该模块的功能是显示所有学生信息,考虑到记录很多,故采用分屏显示。显示完所有记录后,用户输入要修改学生的学号,根据学号查找学生记录,并提示用户修改该记录的哪部分信息,是学号、姓名、年龄或某科成绩、总分还是所有信息都修改,根据用户选择修改相应信息。[流程图]N[程序]/***************************修改模块*******************/voidmodify()/*修改模块*/{structstudents;FILE*fp;inti,n,k,w0=1,w1,w2=0;n=load();do显示所有记录,让用户看哪个要修改输入要修改的学号是否找到此学生记录显示找到的记录调用修改函数提示没有找到继续修改?YNYYYYY返回主菜单{k=-1;/*给用户看全部记录以便确认要修改的记录*/printf_face();/*调用显示数据结构项目函数*/for(i=0;in;i++){if((i!=0)&&(i%10==0))/*目的是分屏显示*/{printf(\n\nRememberNO.051163hneededmodify.Passanykeytocontinue...);getch();puts(\n\n);}printf_one(i);/*调用显示一个记录的函数*/printf(\n);}do{printf(\n\nEnterNO.051163youwanttomodify!NO.:051163-);scanf(%d,&s.num);/*输入要修改的数据的学号*/for(i=0;in;i++)/*查找要修改的数据*/if(s.num==stu[i].num){k=i;/*找到要修改的记录*/s=stu[i];/*把stu[i]备份给s,以便用户反悔时恢复*/}if(k==-1)printf(\n\nNOexist!pleaseagain);}while(k==-1);/*当k=-1表示没有找到*/printf_face();/*调用显示一个记录的函数*/printf_one(k);w1=modify_data(k,n);/*修改学生记录并且返回保存控制值w1,w1=1则表示用户已确认修改*/if(w1==1)/*确认修改*/{printf(\nSuccessful^_^.\n\nAreyoumodifyanother?\n\n\t1.Yes2.Backwithsave\t[]\b\b);scanf(%d,&w0);w2=1;/*来控制保存,使w2=1是标记已有过修改*/}else{w0=0;/*end*/if(w2==1)stu[k]=s;}/*没有修改,把备份的s恢复,使w0=0是为了让循环终止*/if(w0!=1&&w2==1)save(n);/*正常返回,且有过修改*/}while(w0==1);menu();}(4)删除模块[需求分析]该模块的功能是与修改模块一样先显示所有的学生信息,同样考虑到记录很多,采用分屏显示。显示完所有记录后,用户输入要删除学生的学号,根据学号查找学生记录并删除。删除一般的做法是将数据从文件中删除,删除位置后面的记录往前挪。[流程图][程序]voiddel()/*删除模块*/{structstudents;FILE*fp;inti,n,k,w0=1,w1,w2=0;n=load();do{k=-1;printf_face();for(i=0;in;i++){if((i!=0)&&(i%10==0))/*分屏显示*/{printf(\n\nRememberNO.051163-whichneededdelete.Passanykeytocontinue...);getch();puts(\n\n);}printf_one(i);显示所有记录,让用户看哪个要删除输入要删除的学号是否找到此学生记录显示找到的记录使stu[k].sum=0提示没有找到继续删除?YNYYYYYN返回主菜单printf(\n);}do{printf(\n\nEnterNO.051163-thatyouwanttodelete!NO.:051163-);scanf(%d,&s.num);for(i=0;in;i++)if(s.num==stu[i].num){k=i;s=stu[i];/*将要删除的记录备份给s*/}if(k==-1)printf(\n\nNOexist!pleaseagain);}while(k==-1);printf_face();printf_one(k);printf(\nAreyousure?\n\n\t1.Sure2.Backwithoutsaveinthistime[]\b\b);scanf(%d,&w1)
本文标题:C语言课程设计--学生成绩管理系统
链接地址:https://www.777doc.com/doc-5539005 .html