1、目 录一、设计目的二、设计要求三、总体设计四、详细设计五、调试与测试六、结果七、心得与体会八 、程序清单一、设计目的(1)基本掌握面向过程程序设计的基本思路和方法。 (2)达到熟练掌握 C 语言的基本知识和技能。 (3)能够利用所学的基本知识和技能,解决简单的程序。2、设计要求1. 信息录入:录入学生成绩信息(包括学生学号、姓名、各门课程的成绩等).2.信息查询:输入学号,查询学生各门课程的成绩,并显示。3.排序:按各门课程的成绩平均分进行排序,并显示。4.信息删除与修改输入学号,删除该学生的成绩信息。5、利用结构体数组实现学生信息的数据结构设计。6、系统的各个功能模块要求用函数的形式实现。7
2、、系统界面要友好。3、总体设计1 根据上面的需求分析,可以将这个系统分为以下模块: 输入模块,修改模块,删除模块,查找模块,显示模块.学生成绩管理系统学生信息输入 学生信息显示 学生信息修改 删除学生信息 学生信息查找2.信息录入流程图四、详细设计1.主函数首先加入登陆界面,为了用户信息安全设有密码保护。再次进入系统主界面。主界面设计简单,方便用户操作。流程图如下:NY2、录入学生信息模块其中包括学生的姓名、学号和性别以及学生的语文、数学、英语等相关信息;可用函数 int insert(stud stu,int n) 来实现显示一系列功能模块 1-9根据 choice 的值调用各功能模块函数输
3、入 choice,判断 choice 是否是 1-9此操作。当正确输入存在的学生学号,系统进行判断时,如果输入学号错误,提示不存在此学生。输入完一个学生信息后,系统会提示是否在输入。输入完学生信息后,系统提示保存。输入 y 后保存输入信息。学生信息放在定义的结构体中typedef struct long int num; char name10; char sex3; float Chinese;float Math;float English;float total;float average; stud;stud stuN;3、修改模块 用 void modify(stud stu,int
4、 n)函数来实现。用户输入学号,系统自动查找要删除学生的信息。用户需确认删除。流程图y nyn4、排序模块:可用 void sort(stud stu,int n)来实现,一共有 5 种排序方法。分别是,1 按语文成绩排序,2 按数学成绩排序 3按平均分排序 4 按英语成绩排序 5 按总分排序。 yn输入要修改学生号或名字选择排序方式(5 种)找到?显示记录,调用修改函数提示没有找到继续?返回主菜单选择(1-5)显示打印信息继续? 返回主菜单5、查询模块可用 void search(stud stu,int n)函数,查找学生信息。分别有按学号查找和按姓名查找两种,找到就输出此学生全部信息包括
5、学生的语文、数学、英语和等的成绩。流程图: Y nny6、删除模块删除模块用函数 int delet (stud stu,int n)来实现。删除时课按学号删除和按名字删除两种,有用户选择。输入学生学号或者姓名是否找到学生记录显示找到的记录提示没有找到询问是否继续返回主菜单流程图:y nyn7.退出系统可用一个函数 exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。8 文件的打开和保存系统统调用 int openfile( stud stu,int n)函数实现对文件的打开。调用 void savefile(stud stu,int n) /函数,保存写入信息和
6、保存需要文件。输入要删除的学号或者姓名找到?提示没有找到显示记录,调用删除函数继续?返回主菜单5调试与测试问题一、学生信息录入: 当正确输入存在的学生学号,系统进行判断时,提示不存在此学生。解决办法及步骤:1、一个个输出所有的学生的学号,检查文件中是否有此学生,发现有。2、既然有此学生,那么检查循环判断是否有此学生的语句发现没有错3、输出用于循环检查语句中的学生信息,发现乱码4、仔细分析乱码的原因,最后发现是变量的类型错误,错将学生类型的结构体指针变量定义为了其他类型的指针变量。问题二、查询模块:当正确输入查找信息时,系统却不能够得到所要查找的学生信息以及学生的语文、数学、英语等成绩。解决办法
7、及步骤:1、检查所编写的程序代码是否完全正确,若不是,则改之,然后再继续正确输入查找信息看能否得到所要查找的学生信息以及学生的语文、数学、英语等成绩。2、检查当我们在输入查找信息时,看是否我们输入的信息有误,若是这样的话,我们应当仔细输入查找信息。六、结果1 登陆界面默认密码是 8;2 主菜单界面3 修改信息界面4 查询界面5 排序界面七、心得体会本次 c 语言课程设计我选择的题目是学生成绩管理系统,之前我没有接触过 c 语言设计,只是在单片机上运用过 c 语言。在单片机运用的 c 语言与 c 课程设计的语法有一定区别,所以在开始写这个程序的时候很不习惯,经常编译出错。为此我查了许多 c 语言
8、课本。慢慢地改错。这次课程设计最大的收获是,巩固了我的 c 语言基础。在学完c 预言这门课后我以为我完全掌握了 c 语言,为此也去考了全国计算机 2 级。但这次我再次感受到理论与实际操作的区别,发现实际操作更能巩固我们的知识,拓宽我们的知识。为此以后我在学习各方面知识的时候要更加注重理论与实际操作的结合。8、程序代码#include #include #include #include “conio.h“#include #include #define N 100 typedef struct long int num; char name10; char sex3; float Chine
9、se;float Math;float English;float total;float average; stud;stud stuN;stud s;void init(stud stu,int n);int openfile( stud stu,int n)int i=0,num; FILE *fp; /定义文件指针char filename20; /保存文件名 printf(“输入文件名:“); scanf(“%s“,filename); /输入要打开的文件名if(fp=fopen(filename,“rb“)=NULL) /打开文件printf(“ttsorry!无法打开这个文件!
10、n“); /打开文件失败printf(“ttt“); system(“pause“); return(n); fscanf(fp,“%d“, /读入数据量while(inum) /循环读入数据 fscanf(fp,“%d%s%s%f%f%f%f%f“, i+; n+=num;fclose(fp); printf(“t 学号t 姓名t 性别t 语文t 数学t 英语t 总分t 平均分n“); for(i=0;in;i+) printf(“t%dt“,stui.num); printf(“ %st“,stui.name); printf(“%st“,stui.sex); printf(“%3.1ft
11、%3.ft%3.1ft%5.1ft%3.1fn“,stui.Chinese,stui.Math,stui.English,stui.total,stui.average); printf(“ttt 读入数据成功!n“);printf(“ttt“); system(“pause“); return(n); void search(stud stu,int n)/查找函数,查找学生信息,2 中查找方法 system(“cls“); /清屏int i,t,d; char z,K=y;char name20; printf(“rnttt-更改学生信息 -n“); printf(“nnnn“);prin
12、tf(“rtttt1.按学号查找ntttt2.按姓名查找n“); printf(“n “);scanf(“%d“,switch(d) case 1: printf(“rtttt 请输入学号:“); scanf(“%ld“, for(i=0;in;i+) if(stui.num=t) K=x; printf(“t 学号t 名字t 性别t 语文t 数学t 英语t 总分t 平均分n“); /打印信息stui.average=(stui.English+stui.Math+stui.Chinese)/3; stui.total=stui.English+stui.Math+stui.Chinese;
13、printf(“t%4ldt“,stui.num); printf(“ %st“,stui.name); printf(“%st“,stui.sex); printf(“%3.1ft%3.ft%3.1ft%5.1f%t%3.1fn“,stui.Chinese,stui.Math,stui.English,stui.total,stui.average); /return(stui.num); /getchar(); printf(“rnntttt 是否继续查找?y/n? “); /是否继续scanf(“%s“,if(z=y)|(z=Y)search(stu,n); break; if(K=y)
14、 /没有学生信息 /printf(“rtttt 找不到该学生! “); printf(“rnttttsorry!找不到该学生!“); printf(“nnnnnttt“); system(“pause“); break; case 2: printf(“rtttt 请输入姓名:“); scanf(“%s“,name); for(i=0;in;i+) if(strcmp(stui.name,name)=0) K=x; printf(“t 学号t 名字t 性别t 语文t 数学t 英语t 总分t 平均分n“); /打印信息stui.average=(stui.English+stui.Math+st
15、ui.Chinese)/3; stui.total=stui.English+stui.Math+stui.Chinese; printf(“t%4ldt“,stui.num); printf(“ %st“,stui.name); printf(“%st“,stui.sex); printf(“%3.1ft%3.ft%3.1ft%5.1f%t%3.1fn“,stui.Chinese,stui.Math,stui.English,stui.total,stui.average); printf(“rnntttt 是否继续查找?y/n? “); scanf(“%s“,if(z=y|z=Y)sear
16、ch(stu,n); break; if(K=y) printf(“rnttttsorry!找不到该学生!“); printf(“nnnnnttt“); system(“pause“); break; void sort(stud stu,int n)/排序函数, 5 种排序 system(“cls“);int i=0,j=0,t=0; stud s;printf(“rnttt-学生信息排序 -nnnnnn“); printf(“rtttt1.按英语成绩排序nrtttt2.按语文成绩排序nrtttt3.按数学成绩排序nrtttt4.按平均成绩排序nrtttt5.按总分成绩排序n“); prin
17、tf(“ 请选择:“);scanf(“%d“, switch(t) case 1: for(i=0;in-1;i+) for(j=0;jn-i-1;j+) if(stuj.Englishstuj+1.English) /按英语排序 s=stuj; stuj=stuj+1; stuj+1=s; printf(“rtttn-按英语成绩排序-nn“); init(stu,n); break; case 2: for(i=0;in-1;i+) for(j=0;jn-i-1;j+) if(stuj.Chinesestuj+1.Chinese)/按语文排序 s=stuj; stuj=stuj+1; stu
18、j+1=s; printf(“rtttn-按语文成绩排序-nn“); init(stu,n); break; case 3: for(i=0;in-1;i+) for(j=0;jn-i-1;j+) if(stuj.Mathstuj+1.Math) s=stuj; stuj=stuj+1; stuj+1=s; printf(“rtttn-按数学成绩排序-nn“); init( stu , n); / printf(“ttt“); /system(“pause“); /getchar(); break; case 4: for(i=0;in-1;i+) for(j=0;jn-i-1;j+) if(
19、stuj.averagestuj+1.average) s=stuj; stuj=stuj+1; stuj+1=s; printf(“rtttn-按平均分成绩排序-nn“); init(stu,n); break; case 5: for(i=0;in-1;i+) for(j=0;jn-i-1;j+) if(stuj.totalstuj+1.total) s=stuj; stuj=stuj+1; stuj+1=s; printf(“rtttn-按总分成绩排序-nn“); init(stu,n); / printf(“ttt“); /system(“pause“); /getch(); brea
20、k; int delet (stud stu,int n) /删除学生信息函数 2 种删除 system(“cls“);long t,i,z,j,h=0;char l;char name20; printf(“rttt-删除学生信息-nnnnnn“); / printf(“rtttt 删除学生信息:“); printf(“rtttt1.按学号删除nrtttt2.按姓名删除n“); printf(“rtttt“);scanf(“%d“, switch(z) case 1: printf(“rtttt 请输入学号:“); /按学号删除scanf(“%ld“, for(i=0;in;i+) if(s
21、tui.num=t) printf(“ t 学号t 姓名t 性别t 语文t 数学t 英语t 总分t 平均分n“);/打印信息printf(“t%4ldt“,stui.num); printf(“ %st“,stui.name); printf(“%st“,stui.sex); printf(“%3.1ft%3.1ft%3.1ft%3.1f%t%3.1fn“,stui.Chinese,stui.Math,stui.English,stui.total,stui.average); h=1;printf(“rtttt 确定删除以上信息?y/n? “); scanf(“%s“,if(z=y|z=Y)
22、for(j=i;jn-1;j+) /进行删除 stuj.num=stuj+1.num;strcpy( stuj.name,stuj+1.name);stuj.Chinese=stuj+1.Chinese;strcpy(stuj.sex,stuj+1.sex);stuj.Math=stuj+1.Math;stuj.English=stuj+1.English;stuj.total=stuj+1.total;stuj.average=stuj+1.average; printf(“rtttt 删除成功!nn“); printf(“rttt 是否继续? y/n? “);scanf(“%s“,if(z
23、=y|z=Y)delet(stu,n); / printf(“ttt“); / system(“pause“); if(h=0)printf(“rttttsorry 找不到该学生! nn:“); printf(“rtttt 是否继续?y/n?“); scanf(“%s“, if(l=y|l=Y) delet (stu,n); break; case 2: printf(“rtttt 请输入姓名:“); /按名字删除scanf(“%s“,name); for(i=0;in;i+) if(strcmp(stui.name,name)=0) /按名字查找 printf(“t 学号t 姓名 t 性别t
24、 语文t 数学t 英语t 总分t 平均分n“);printf(“t%4ldt“,stui.num); printf(“ %st“,stui.name); printf(“%st“,stui.sex); printf(“%3.1ft%3.ft%3.1ft%5.1f%t%3.1fn“,stui.Chinese,stui.Math,stui.English,stui.total,stui.average); h=1;printf(“rtttt 确定删除以上信息?y/n? “); scanf(“%s“,if(z=y|z=Y)for(j=i;jn-1;j+) /进行删除 stuj.num=stuj+1.
25、num;strcpy( stuj.name,stuj+1.name);stuj.Chinese=stuj+1.Chinese;strcpy(stuj.sex,stuj+1.sex);stuj.Math=stuj+1.Math;stuj.English=stuj+1.English;stuj.total=stuj+1.total;stuj.average=stuj+1.average; printf(“rtttt 删除成功!nn“); printf(“rttt 是否继续? y/n? “);scanf(“%s“,if(z=y|z=Y)delet(stu,n); / printf(“ttt“); /
26、 system(“pause“); if(h=0)printf(“rttttsorry 找不到该学生! nn:“); printf(“rtttt 是否继续?y/n?“); scanf(“%s“, if(l=y|l=Y) delet (stu,n); return (n-1); int insert(stud stu,int n) /录入学生信息函数 带返回值 system(“cls“);int i=0;char z=y,f; FILE *fp; /定义文件指针 char filename20; /定义文件名printf(“rttt-录入学生信息-nnnnnn“); for(i=n;i=Ni+)
27、 /输入信息 printf(“rtttt 请输入学号:“); scanf(“%4d“, printf(“rtttt 请输入姓名:“); scanf(“%s“, printf(“rtttt 请输入性别:“); scanf(“%s“, printf(“rtttt 请输入语文成绩:“); scanf(“%f“, printf(“rtttt 请输入数学成绩:“);scanf(“%f“,printf(“rtttt 请输入英语成绩:“); scanf(“%f“, stui.average=(stui.English+stui.Math+stui.Chinese)/3; stui.total=stui.En
28、glish+stui.Math+stui.Chinese; n+;printf(“rtttt 是否继续?y/n?“); scanf(“%s“, if(z=n|z=N) /n=i+1; /sort(stu,n); printf(“rtttt 打印信息:n“); printf(“t 学号t 姓名t 性别t 语文t 数学t 英语t 总分t 平均分n“); /打印录入信息for(i=0;in;i+) /stui.average=(stui.English+stui.Math+stui.Chinese)/3; /stui.total=stui.English+stui.Math+stui.Chinese
29、; printf(“t%4ldt“,stui.num); printf(“ %st“,stui.name); printf(“%st“,stui.sex); printf(“%3.1ft%3.ft%3.1ft%5.1f%t%3.1fn“,stui.Chinese,stui.Math,stui.English,stui.total,stui.average); i=0;printf(“是否保存?y/n? “); /保存录入信息部分scanf(“%s“, if(f=y|f=Y)printf(“输入文件名:“); /输入文件名 scanf(“%s“,filename); /strcpy(filena
30、me,“c.txt“);/数据默认保存在 c.txt 文件中/scanf(“%s“,filename); /if(filenane=y)if(fp=fopen(filename,“w“)=NULL) printf(“tttsorry!无法打开这个文件!n“); system(“pause“); return 0; fprintf(fp,“%dn“,n); /写入数据while(in) fprintf(fp,“t%dt%st%st%3.1ft%3.1ft%3.1ft%3.1ft%3.1fn“,stui.num,stui.name,stui.sex,stui.Chinese,stui.Math,s
31、tui.English,stui.total,stui.average); i+; fclose(fp); /关闭文件printf(“tt 数据保存成功!n“);/数据默认保存在 c.txt 文件中printf(“ttt“); z=0;system(“pause“); if(z=y|z=Y) insert(stu, n); return n; void modify(stud stu,int n)/更改学生信息函数 system(“cls“);/printf(“rttt-更改学生信息 -“); int t,i,a=0;char z; printf(“rttt-更改学生信息-nnnnnn“);
32、printf(“rtttt 请输入学号:“); scanf(“%ld“, for(i=0;in;i+) /查找 if(stui.num=t) / K=x; / printf()printf(“t 学号t 姓名t 性别t 语文 t 数学t 英语t 总分t 平均分n“);/打印信息printf(“t %4ldt“,stui.num); printf(“ %st“,stui.name); printf(“ %st“,stui.sex); printf(“%3.1ft%3.ft%3.1ft%5.1f%t%3.1fn“,stui.Chinese,stui.Math,stui.English,stui.t
33、otal,stui.average); a=1;/return(stui.num); / getchar(); /break;/printf(“sorry!找不到该学生“);/a=0;printf(“rttt 你确定要更改以上信息?y/n? “);/确认更改scanf(“%s“,if(z=y) printf(“rtttt 请输入学号:“);/ stut.num=num;scanf(“%d“, printf(“rtttt 请输入姓名:“); scanf(“%s“,stui.name); printf(“rtttt 请输入性别:“); scanf(“%s“,stui.sex); printf(“r
34、tttt 请输入语文成绩:“); scanf(“%f“, printf(“rtttt 请输入数学成绩:“); scanf(“%f“, printf(“rtttt 请输入英语成绩:“); scanf(“%f“, stui.average=(stui.English+stui.Math+stui.Chinese)/3; stui.total=stui.English+stui.Math+stui.Chinese; printf(“t 学号t 姓名t 性别t 语文 t 数学t 英语t 总分t 平均分n“);/打印信息printf(“t %4ldt“,stui.num); printf(“ %st“,
35、stui.name); printf(“ %st“,stui.sex); printf(“%3.1ft%3.ft%3.1ft%5.1f%t%3.1fn“,stui.Chinese,stui.Math,stui.English,stui.total,stui.average); printf(“rtttt 修改的信息是否正确?y/n “); /确认scanf(“%s“,if(z=y)/savefile(stu,n);/保存写入信息printf(“rtttt 修改成功!nn“); printf(“rttt 是否继续? y/n? “);scanf(“%s“,if(z=y|z=Y)modify(stu
36、,n); else printf(“rtttt 请重新修改!“); modify(stu,n); if(a=0)/printf(“你确定要更改以上信息?y/n?n“);printf(“rttttsorry!找不到该学生n“);printf(“rtttt 是否重新输入? y/n? “);/重新输入scanf(“%s“,if(z=y)modify(stu,n); /break;void init(stud stu,int n) /打印函数,打印文件中的信息system(“cls“);int i; printf(“nn“);printf(“t 学号t 姓名t 性别t 语文t 数学t 英语t 总分t
37、平均分n“); for(i=0;in;i+) /循环打印 stui.average=(stui.English+stui.Math+stui.Chinese)/3; stui.total=stui.English+stui.Math+stui.Chinese; printf(“t%4ldt“,stui.num); printf(“ %st“,stui.name); printf(“%st“,stui.sex); printf(“%3.1ft%3.ft%3.1ft%5.1f%t%3.1fn“,stui.Chinese,stui.Math,stui.English,stui.total,stui.
38、average); printf(“nnnnnttt“); system(“pause“); void savefile(stud stu,int n) /保存函数,保存写入信息 int i=0; FILE *fp; /定义文件指针char filename20; /定义文件名printf(“输入文件名:“); scanf(“%s“,filename); if(fp=fopen(filename,“w“)=NULL) printf(“tttsorry!无法打开这个文件!n“); system(“pause“); /return 0; fprintf(fp,“%dn“,n); /写入数据whil
39、e(in) fprintf(fp,“%dt%st%st%3.1ft%3.1ft%3.1ft%3.1ft%3.1fn“,stui.num,stui.name,stui.sex,stui.Chinese,stui.Math,stui.English,stui.total,stui.average); i+; fclose(fp); /关闭文件printf(“tt 数据保存成功 !n“);printf(“nnnnnttt“); system(“pause“); /return n;void main() int choice,n=0; char password20;/ void savefile(
40、stud stu,int n) ;/保存函数,保存写入信息printf(“nnn“);/界面初始化printf(“t555555555555555555555555555555555555555555555555555555555555555nnn“);printf(“tt* - 欢迎进入学生成绩管理系统系统 -*nn“);printf(“t555555555555555555555555555555555555555555555555555555555555555nnn“);printf (“rtttt 默认密码:8nn“);printf(“t444444444444444444444444
41、444444444444444444444444444444444444444nn“);printf (“ttt 请输入您的工作密码:“);scanf (“ttt%s“,/输入密码if (strcmp (“8“,password)=0) while(1) system(“cls“);/清屏printf(“nn“);printf(“rtt55555555555555555555555555555555555555555555555555555555555555nn“);printf(“rttt4-欢迎进入学生成绩管理系统 -4nn“);/系统主菜单界面printf(“rtt55555555555
42、555555555555555555555555555555555555555555555555555nn“); printf(“rtttt1. 修改学生记录 nn“); printf(“rtttt2. 输出学生记录nn“); printf(“rtttt3. 排序学生记录nn“); printf(“rtttt4. 查找学生记录nn“); printf(“rtttt5. 录入学生记录nn“); printf(“rtttt6. 删除学生记录nn“); printf(“rtttt7. 打开文件nn“); printf(“rtttt8. 保存文件nn“); printf(“rtttt9. 退出nn“); printf(“rtttt 请选择(1-9):“); scanf(“rtttt%d“, switch(choice) case 1: modify(s