基于c语言的学生成绩管理系统报告_第1页
基于c语言的学生成绩管理系统报告_第2页
基于c语言的学生成绩管理系统报告_第3页
基于c语言的学生成绩管理系统报告_第4页
基于c语言的学生成绩管理系统报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、杭州电子科技大学信息工程学院创新创业实践报告创新创业实践报告杭州电子科技大学信息工程学院创新创业实践报告实践项目名称 学生成绩管理系统 实践项目的目的 锻炼C语言编程能力和软件组织设计能力 项目用到的相关知识c语言C语言是一门通用计算机编程语言,应用广泛。 C语言的设计目标是提供一 种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运 行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性, 以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一 些嵌入式处理器(单片机或称MCU )以及超级电脑等作业平台。指针使用指针来读

2、取数据,在重复性操作的状况下,可以明显改善程序性能,例 如在遍历字符串,查取表格,控制表格及树状结构上。对指针进行复制,之后再 解引用指针以取出数据,无论在时间或空间上,都比直接复制及访问数据本身来 的经济快速。指针的机制比较简单,其功能可以被集中重新实现成更抽象化的引用数据形 别。许多编程语言中都支持某种形式的指针,最著名的是C语言,但是有些编程语言对指针的运用采取比较严格的限制,如Java 一般避免用指针,改为使用引用。有两种含义,一是作为数据类型,二是作为实体。指针作为实体,是一个用来保存一个内存地址的计算机语言中的变量。指针 一般出现在比较底层的程序设计语言中,如 C语言。高层的语言如

3、Java 一般避 免用指针,而是引用。指针作为数据类型,可以从一个函数类型、一个对象类型或者一个不完备类 型中导出。从中导出的数据类型称之为被引用类型。指针类型描述了一种对象, 其值为对被引用类型的实体的引用。C+标准中规定,指针”概念不适用于成员指针(不包含指向静态成员的指 针)。C+标准规定,指针分为两类:object pointer type :指向void或对象类型,表示对象在内存中的字节地址 或空指针。function pointer type :指代一个函数。数组也称为数组为了处理方便,把具有相这些按序排列的同类数据所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个

4、 类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字 称为数组名,编号称为下标。组成数组的各个变量称为数组的分量, 的元素,有时也称为下标变量。数组是在程序设计中, 同类型的若干变量按有序的形式组织起来的一种形式。 元素的集合称为数组。结构体C语言中聚合数据类型的在C语言中,结构体指的是一种数据结构,是类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结 构体同时也是一些元素的集合,这些元素称为结构体的成员,且这些成员可以为 不同的类型,成员一般用名字访问。变量变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式

5、语言中,变量通常是可变的;但在纯函数式语言中, 变量可能是不可变的。在一些语言中,变量可能被明确为是能表示可变状态、 具 有存储空间的抽象;但另外一些语言可能使用其它概念(如C的对象)来指称这种抽象,而不严格地定义“变量”的准确外延。由于变量让你能够把程序中准备使用的每一段数据都赋给一个简短、易于记忆的名字,因此它们十分有用。变量可以保存程序运行时用户输入的数据(如使 用InputBox函数在屏幕上显示一个对话框,然后把用户键入的文本保存到变量 中)、特定运算的结果以及要在窗体上显示的一段数据等。简而言之,变量是用 于跟踪几乎所有类型信息的简单工具。变量声明后没有赋值的话编译器会自动提示并赋予

6、默认值变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储 Script运行时可更改的程序信息。例如,可以创建一个名为Click Count的变量来存储用户单击Web页面上某个对象的次数。使用变量并不需要了解变量在计 算机内存中的地址,只要通过变量名引用变量就可以查看或更改变量的值。在 VB Script中只有一个基本数据类型,即 Variant,因此所有变量的数据类型都是 Variant。函数一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的 功能。所有的高级语言中都有子程序这个概念,用子程序实现模块的功能。在C语言中,子程序的作用是由一个主函数和若干个函数构成

7、。由主函数调用其他函 数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共 选用。要善于利用函数,以减少重复编写程序段的工作量。函数分为全局函数、全局静态函数;在类中还可以定义构造函数、析构函数、 拷贝构造函数、成员函数、友元函数、运算符重载函数、内联函数等。函数的定义:返回类型名字(形式参数表列)函数体语句return表达式;函数调用:名字(实际参数表列);四.软件设计及流程图进入软件时可看到如下界面:C-Wiei &3d nii&tratorDkCo p址隼s程爭甘程职匸韋苜程护Debugs:苗b理序.曲

8、占二 t 琳*二二科-与苦;二匕口:;*: 创盍学牛.成绩管理册. 添初学主的倩侗删球学生的仁鬼e改学生的信思显恥听育学主的信息. 搜索个人个门成绩井 所有学牛倍息的排序. 离开请选择:首次使用时选择1 (创建学生成绩管理册),输入学生成绩,输入后会有 提示保存和查看,输入错误字符也会有温馨提示。 创建完学生成绩管理册后,可以对原有的学生信息进行添加删除和相应的 修改。代码分析: 在主函数中,仅有两个自定义函数(菜单显示和选择),这两个函数也是 对整个程序的主流程。(menu();choose();)函数menu()用于显示主菜单,具有清屏功能。函数 choose()用于对主菜单的功能进行选择

9、。若输入错误会有提示。函数 input()这个函数是进行用户对学生成绩的输入,依次可输入学号、姓名、年龄、C语言成绩、代数成绩,系统会自行计算总分。函数 savescore()这个函数是对输入信息的保存,程序默认保存在D:/score.txt中,若保存不成功或无法打开,会有相应的提示。特别注意:因为该程序会在 D盘生成相应文件,容易被360等杀毒软件识别并拦截,运行前请关闭杀毒软件。函数 loadscore()这个函数是对输入信息的读取,程序默认读取在D:/score.txt中,若读取不成功或无法打开,会有相应的提示。函数 choosec()这个函数是对学生列表信息的排序,排序分为按学号降序、

10、按姓名降序、按总分由高到低、按c语言由高到低、按代数由高到低和回到主菜单。选择不同的排序方法会进入不同的子函数。二 rUw咁悶讯曲opi:逵吉1E庆注ISi手VcS音程序Oebj嵌716言准琲exm口下足第二T来李:%$%S%$袪:学号降序按姓客降序歩总井由鬲到低 5 g技(:语言由高到任. 按代数由高到低 回到主菜单髓世無$比$%孰$吠$斌$弔鉄詆$祐熬無彊$先$%轨$%$筍$哺雅$甩能$%3生$请选萍喻入方式:函数 number()该函数用于对学号排序的子函数。函数name() 该函数用于对姓名排序的子函数。函数 total()该函数用于对总分排序的子函数。函数 score_C()该函数用

11、于对C语言分数排序的子函数。函数 score_algebra()该函数用于对代数分数排序的子函数。函数show() 该函数可显示所有学生信息。显示后通过任意键返回主菜单。函数 chaxun()该函数可查询相应信息,是查询函数的总目录(学号、姓名、年龄)。函数 personal()该函数可根据学生姓名进行查询相应信息。若输入错误会有提示。函数add() 该函数可添加新的学生信息。函数fix()该函数可修改学生信息。若无法找到,会有相应的提示。函数del()该函数可删除旧的学生信息。若无法找到,会有相应的提示。函数Exit()退出函数,显示制作组,并按任意键退出以下是总流程图:第6页共20页杭州电

12、子科技大学信息工程学院创新创业实践报告开始0 1创建学生信氫表U d毎生bfecore.txt文件 耳tZ=输入命-金一O 一删除学生 E 一海加新学生排序降序) 结束语o按总分. n-按姓名 0按学号一 O按年静円 O按妊名円 O一按学号円 辙入危令jD盘生成score txt丈件删除学生P2 - b加新学生_狂4修改学生n3显示所有学圭信息升序97排序(降序结束语主流程图第7页共8页z结束杭州电子科技大学信息工程学院创新创业实践报告五.软件代码#in clude#in clude#in clude/*全局变量*/int ii=0;/*菜单系统*/void menu (void)#in cl

13、ude/*system(CLS);#defi ne M 1函数声明prin tf(tA*A*A*A*/*/A*A*A*A*A*A*A*A*定义结构体变量void menu (void);A*A*A*A*A*A*A*A*/void choose(void);A*A*A*A*A*A*A*A*typ edef structvoid inpu t(void);An);stude ntvoidprin tf(tA* 。savescore(void);欢迎使用这个成绩int num;void管理系统。/学号;loadscore(void);*An);char n ame30;void choosec(vo

14、id);prin tf(tA*A*A*A*/姓名;void average(void);A*A*A*A*A*A*A*A*int age;void total(void);A*A*A*A*A*A*A*A*年龄void n ame(void);A*A*A*A*A*A*A*A*double score_C;void nu mber(void);An);/C语言的成绩;void show(void);prin tf(n);double score_algebra; /void excelle nt(void); void p ass in g(void);printf( l#代数的成绩;void pe

15、rson al(void);#double scoreAll;void Exit();#n);/总成绩;void score_C(void);prin tf(t#创建学MESSA;void生成绩管理MESSA stu4O;i nt S;score_algebra(void);册1void nu mber1(void);#n);/*void add();prin tf(t#添加学typ edef structvoid fix();生的信stude ntsvoid del();息2void chax un();#n);char n ame20;prin tf(t#删除学char nu m15;/*

16、生的信float scoreM;主函数调用息3float average;*/#n);float total;int mai n()prin tf(t#修改学MESSA;生的信MESSA stu20;i ntmenu();息4S;*/choose();#n);prin tf(t#显示所OO第22页共20页有学生的信息51;break;case 号:);fflush(stdi n);# n);prin tf(t# 搜索个人个门成绩分数6 # n);prin tf(t# 所有学生信息的排序7 # n);prin tf(t# 离开 9 #n);prin tf(t# #n);prin tf(nt请选择

17、:nt);/*菜单选择*/void choose(void)int x,flag=0;while(flag=0)fflush(stdi n);scan f(%d, &x); getchar(); switch(x) case1:i npu t();savescore() ;loadscore();me nu (); choose();flag=1;brea k;case 2:add();i npu t();saves core();loadscore();m enu( );choose();flag=3:del();savescore();l oadscore();me nu( );c hoo

18、se();flag=1;breakcase4:fix();savescore();lo adscore();me nu( );ch oose();flag=1;break;case5:flag=1; nu mber1(); show();break;case6:chax un( );flag=1;br eak;case7:choosec();flag=1;b reak;case9:Exit();flag=1;default: prin tf(t对不起,输入有误 或该项服务未开通n);/*输入学生成绩*/ void inpu t(void)int flag=1,j,i;char k;float

19、pp=0;for(;flag=1;ii+) printf(t 请输 入第N%hd个学生 的成绩信 息:n,ii+1);fflush(stdi n);puts(”t 学scan f(%d, &stuii nu m);puts(”t 姓名:);fflush(stdi n);gets(stuii .n ame); fflush(stdi n); puts(”t 年 龄:);fflush(stdi n);scan f(%d, &stuii age);fflush(stdi n); puts(t 分 数:tC语言t代数”);for(j=0;j_)!);else if(k=N) flag=0;S=ii;b

20、reak; else break;for(i=0;i=S;i+)for(j=0,stui.scoreAII=0.0;jM;j+)stui.scoreAll=stui .score_algebra+stu i.score_C;nu mber1();/*保存数据*/ void savescore(void) int i,flag=1;FILE *fp;char m;puts(t你想要保 存这些数据 么?(Y/N);while(1)fflush(stdi n);scan f(%c,&m);if(m=Y)if(fp=fo pen (D:sc ore.txt,w)=NUL L)printf(t 对不起,

21、 无法打开这个表 单.(+ +)狂 晕 n);exit(0);for(i=0;i=S;i+)if(fwrite( &stui,siz eof(struct stude nt),1,fp)!=1)puts(t 对不 起,表单书写错误 了 !(+ +)狂晕);flag=0;if(flag=1) for(i=0;i=S;i+) printf(t 好了,第N.%d个学生的数据 已经被保存!(AoA)/n,i+1); fclose(fp); break;elseif(m!=N&m!=Y) puts(t输入错误,请重新输入!00 b);elsebreak;/*读取文件中保存的 数据*/void loads

22、core(void) FILE *fp;char n;MESSA restu20;i nt i,flag=0;char read610= 学号,姓名,年龄 ,c语言,”代数, 总分;puts(t你想要立 刻读取这些数据 么?(Y/N);while(1)fflush(stdi n);scan f(%c,&n); if(n=Y) if(fp=fo pen (D:s core.txt,广)=NUL L)fprin tf(stderr,t Op en %s error!n,score.tx t);exit(0);for(i=0;i=S;i+)fread(&restui,size of(struct s

23、tude nt),1,fp);system(CLS);puts(t成绩信息读取中);prin tf(t好的,表单已经被读取!n);prin tf(n);prin tf(t$*$*$*9999999999999999*$*$*$*$*$n );$*$nt);$n);for(i=0;i=S;i+)prin tf($*$ );for(i=0;i6;i+)prin tf(%-10s,rea di);printf(”$*$);prin tf(n);for(i=0;i=S;i+)prin tf(t$*$ );prin tf(%-10d%-10 s,restui. nu m,restu i. name);p

24、rin tf(%-10d,rest ui.age);prin tf(%-10.1f,re stui.score_C);prin tf(%-10.1f,restui.score_algebra)prin tf(%-10.1f,re stui.scoreAII);printf(” $*$n);tttttt $*$);prin tf(nt$*$*$ *ct*ct*ct*ct*ct*$fclose(fp);break;else if(n=N) break;elseprintf(t 对不 起,出现错误了, 再来一次!n);puts(t输入任意 键回到主菜 单n);getchar();getchar();

25、/*选择查分的子菜单 及子菜单选择*/void choosec(void)intbiao,i,flag=0;FILE *fp;if(fp=fo pen (D:s core.txt,r)=NUL L)printf(t 对不起,你无法输入任何 成绩信息!无法打 开这个表单!nnn);printf(t 输入任意键回到主菜单!n);getchar(); getchar(); men u(); choose();fread( &stui,sizeof (struct stude nt),1,fp);fclose(fp); system(CLS);printf(t以下是第 二个菜单:n);prin tf(

26、n);prin tf(t%$%$ %$%$%$%$ %$%$%$%$ %$%$%$%$ %$%$%$%$ %$%$%$%$ %$%$%$%$ %$%$%$%$ %$%$n);prin tf(t%$ 按 学号降 序1 %$n);prin tf(t%$ 按姓名降序2 %$n);prin tf(t%$ 按总分由高到低3%$n);printf(t%$ 按 c语言由高到低4 %$n);prin tf(t%$ 按代数由高到低5 %$n); prin tf(t%$回到主菜9 %$n);prin tf(t%$%$ %$%$%$%$ %$%$%$%$ %$%$%$%$ %$%$%$%$ %$%$%$%$ %$%

27、$%$%$ %$%$%$%$ %$%$n);prin tf(nt 请选择 输入方式:n);while(flag=0)fflush(stdi n);scan f(%d, &biao); getchar(); switch(biao) case1:flag=1; nu mber();s how();break;case2:flag=1; name();sho w();break;case3:flag=1;total();sho w();break;case4:flag=1;score_C();s how();break;case5:flag=1;score_algeb ra();show();br

28、eak;case 9:flag=1;me nu( );cho ose();break;default: prin tf(t 对不起,操作无法 进行!请重新做出 正确操作!n);I*显示分数*/ void show(void)int i,n, flag=0;char head710=学号,姓名,年龄 ,c语言,”代数,” 总分;system(CLS); puts(t读取信息 中);prin tf(n);prin tf(t$*$*$*$*ct*ct*ct*ct*ct*$*t*t*t*t*t*$ $*$*$*$*$nn t);for(i=0;i7;i+) prin tf(%-10s,head i);

29、prin tf(nt); for(i=0;i=S;i+)IIIII lllllllllllllllllllllIIIIIIIIIIIIIIIIIIIIIlllllllllllllllllllllIlliprin tf(%-10d%-10s ,stui. nu m,stui. na me);prin tf(%-10d,stui .age);prin tf(%-10.1f,stu i.score_C);prin tf(%-10.1f,stu i.score_algebra);prin tf(%-10.1f,stu i.scoreAII);prin tf(nt);prin tf(nt$*$*$999

30、9999999999999 n);prin tf(nt 请选 择:(1 or2)nn ”); pu ts(t1. 回到第二个菜 单!n);puts(”t2.回到主菜 单!n);while(flag=0)fflush(stdi n); scan f(%d,&n); getchar();switch( n) case1:flag=1;choosec();b reak;case2:flag=1;me nu ();cho ose();break;default: prin tf(t出错了,请再次输入!n);I*按总分由高到低*1void total(void)int i,j,k;MESSA t;for

31、(i=0;iS;i+)k=i;for(j=i+1;j=S;j+) if(stuk.scoreAllstu j.scoreAll) k=j;if(k!=i)t=stuk; stuk=stui;stui=t;/*按c语言由高到低*/void score_C(void)int i,j,k;MESSA t;for(i=0;iS;i+)k=i;for(j=i+1;j=S;j+) if(stuk.score_Cstu j.score_C) k=j;if(k!=i)t=stuk; stuk=stui;stui=t;/*按代数由高到低*/void score_algebra(void) int i,j,k;M

32、ESSA t;for(i=0;iS;i+)k=i;for(j=i+1;j=S;j+) if(stuk.score_algeb rastuj.score_alge bra) k=j;if(k!=i)t=stuk; stuk=stui; stui=t;/*按学号降序*/void nu mber(void)int i,j,k;MESSA t;for(i=0;iS;i+)k=i;for(j=i+1;j=S;j+) if(stuk. num stuj. num)k=j;if(k!=i)t=stuk; stuk=stui; stui=t;/*按学号升序*/void nu mber1(void) int i

33、,j,k;MESSA t;for(i=0;iS;i+)k=i;for(j=i+1;jstuj. num)k=j;if(k!=i) t=stuk; stuk=stui; stui=t;/*按姓名降序*/ void n ame(void)int i,j,k;MESSA t;for(i=0;iS;i+)k=i;for(j=i+1;j=S;j+) if(strc mp( stuk. nam e,stuj. name)0) k=j;if(k!=i)t=stuk; stuk=stui;stui=t;/*个人学生成绩查询*/void person al(void) int i,f,w,flag=0;char

34、 b10,a;FILE *fp;char head3610=学 号,”姓名,”年龄 ,c语言,代数, 总分;if(fp=fo pen (D:s core.txt,r)=NULL)printf(t 对不 起,无法输入任何 信息!无法找到该 表单!nnn);printf(t 输入 任意键回到主菜 单!n);getchar(); getchar(); men u(); choose();for(i=0;i=S;i+)fread( &stui,sizeof (struct stude nt),1,fp);fclose(fp);puts(t请输入你 想要搜索的学生成 绩信息:n);puts(t学生成绩

35、信息如下n”);for(i=0;i=S;i+).n ame);f=i;fflush(stdi n);scan f(%c,&a); if(a=Y) system(CLS);pu ts(t成绩信息读取中);prin tf(n);prin tf(t*for(i=0;i6;i+)prin tf(%-10s,head3i)nt);prin tf(n);prin tf(t*n );break;elseprin tf(t出错了,重新选择 吧!n);puts(t是否继续 操作?n);printf(t1.离开系 统!n);printf(t2.回到主 菜单!n);printf(t3.回到第 二个菜单!n);put

36、s(t 请选 择:n);while(flag=0)fflush(stdi n);prin tf(t%s,stui. name);puts(tn Your choose is :n ”);while(1)fflush(stdi n); gets(b);for(i=0;i=S;i+)if(strcm p( b,stui. n ame)=0)prin tf(t该生学生成绩信息 s?(Y/N)n,stuiprin tf(nt);prin tf(%-10d%-10 s,stuf. nu m,stuf. name);prin tf(%-10d,stuf.age);prin tf(%-10.1f,st uf

37、.score_C);prin tf(%-10.1f,st uf.score_algebra);prin tf(%-10.1f,st uf.scoreAll);scan f(%d, &w); getchar(); switch(w) case1:Exit();flag=1;case2:me nu( );choose();fl ag=1;break;case3:choosec();flag=1;b reak;default: prin tf(t对不起,操作无法进行!请重新选择!n);/*添加*/ void add()int i,a,f=1;m1: printf(t 请输 入添加的学号:n);sca

38、n f(%d, &a);f=1;for(i=0;iii;i+)if(stui. num=a)f=0;if(f=1)prin tf(tok,可添加”);else if(f=0)printf(t 已经有 啦,不可添加n);goto m1;/*修改*/void fix()int i,a,f=1,x;m1: printf(t 请输 入修改的学号:n);scan f(%d, &a);f=1;for(i=0;iii;i+) if(stui. num=a)f=0;break; if(f=0)prin tf(tok, 可修改n);printf(t 请输 入修改内容:nt1. 名字t2.年龄t3.c 语言分数t

39、4.代数 分数nt修改总分 是不可以的啦 ntt9.主菜单 n);scan f(%d, &x); getchar(); if(x=1) prin tf(t请输入新的名字n);fflush(stdi n);scan f(%s, &);fflush(stdi n);if(x=2)prin tf(t请输入新的年龄n);fflush(stdi n);scan f(%d, &stui.age);fflush(stdi n);if(x=3)prin tf(t请输入新的c语言分数n);fflush(stdi n);scan f(%lf, &stui. score_C);fflush(std

40、i n);if(x=4)prin tf(t请输入新的代数分数宙);fflush(stdi n);scan f(%F, &stui. score_algebra);fflush(stdi n);if(x=9)men u();else if(f=1)printf(t没有数据啦,不可修改n);goto m1;/*删除*/void del()int i,j,a,f=1,x;char c10;f=1;m2: printf(t 请输 入删除内容:n t1. 学号t2.名字ntt9. 主菜单n); elseprin tf(tok, 除宙);已删if(f=1)ii-; elseif(f=1)printf(t没有数据啦,不可删除n);goto m2;scan f(%d, &a);if(a=1)prin tf(t请输入删除的学号prin tf(t啦,不可删除n);没有数据n);fflush(stdi n);scan f(%d, &x);fflush(stdi n);for(i=1;iii;i+)if(stui. num=x)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论