1、XIAN TECHNOLOGICAL UNIVERSITY课程设计报告课程名称: C语言程序设计专 业: 班 级: 姓 名: 学 号: 指引教师: 成 绩: 年 1月5日题目:学生成绩管理系统思路:先建立一种链表然后以链表为基本进行各种操作,设计学生成绩管理系统,通过主页显示,依照自己需求按主页中所显示环节输入,删除,查找,插入,修改,记录学生信息。算法:核心算法为链表生成,插入,查找,排序算法。函数模块简介:void xuanze();/选取功能void shuchu(struct student*h);/输出void tianjia(struct student*h);/添加void sh
2、anchu(struct student*h);/删除void chaxun(struct student*h);/查询void genggai(struct student*h);/更改主void gxuehao(struct student*p);/改学号void gname(struct student*p);/改姓名void ggaoshu(struct student*p);/改高数成绩void gyingyu(struct student*p);/改英语成绩void gc(struct student*p);/改c语言成绩void tongji();/记录主void max_ave
3、rage(struct student*h);/记录平均分最高void max_gaoshu(struct student*h);/记录高数最高void max_yingyu(struct student*h);/记录英语最高void max_c(struct student*h);/记录c语言最高void bujige_average(struct student*h);/记录平均分不及格学生信息void bujige_gaoshu(struct student*h);/记录高数不及格学生信息void bujige_yingyu(struct student*h);/记录英语不及格学生信息v
4、oid bujige_c(struct student*h);/批准c语言不及格学生信息struct student*creat(int n);/创立链表void order_two(struct student*p,struct student*q);/调换位置void order(struct student*h);/排序源程序#includestdio.h#includestring.h#includeconio.h#include #define N 30#define M 3typedef struct student char number10; char name20; floa
5、t scoreM; float aver; float total;STU;STU stuN;int n;void inputscore(void);void savescore(void);void avergescore(void);void total(void);void lookscore(void);void searchscore(void);void statistic(void);void add(void);void modify(void);void delscore(void);void savescore(void);void menu(void);int main(
6、) short int flag=0; menu(); do flag=1; switch(getch() case1:inputscore();break; /* 输入成绩*/ case2:lookscore();break; /*查当作绩*/ case3:searchscore();break; /*查找成绩*/ case4:statistic();break; /*成绩记录*/ case5:modify();break; /*修改成绩*/ case6:add();break; /*添加成绩*/ case7:delscore();break; /*删除成绩*/ case8:savescor
7、e();break; /*保存成绩*/ case9:exit(0); /*退出成绩*/ default:printf(输入有误n); printf(按任意键继续n); getch(); menu(); while (flag=1);void menu(void) system(cls); printf(tt n);printf(tt 学生信息管理系统 n); printf(tt n);printf(tt n);printf(tt 1. 输入成绩 2. 查当作绩并排序 n);printf(tt n);printf(tt 3. 查询学生成绩 4. 成绩记录 n);printf(tt n);prin
8、tf(tt 5. 修改成绩 6. 添加成绩 n);printf(tt n);printf(tt 7. 删除成绩 8. 保存成绩 n);printf(tt n);printf(tt 9. 退出系统 n);printf(tt n); printf(tt请您选取(0-9)n);/*输入各个同窗学生信息*/void inputscore(void) int i,j ; system(cls); printf(请输入学生总数:n); scanf(%d,&n); for(i=0;in;i+) printf(请输入第%d个学生学号 姓名:n,i+1); scanf(%s,stui.number);scanf
9、(%s,stui.name); printf(请输入学生成绩:n); printf(高数tC语言t大英n); for(j=0;jM;j+) scanf(%f,&stui.scorej); printf(成功输入n);/*计算各个同窗总分*/void total(void) int i,j; for(i=0;in;i+) stui.total=0; for(j=0;jM;j+) stui.total+=stui.scorej; /*计算各个同窗平均分*/void avergescore(void) int i,j; for(i=0;in;i+) stui.aver=0; for(j=0;jM;j
10、+) stui.aver+=stui.scorej; stui.aver=stui.aver/M; /*查看学生成绩及依照平均分对学生排序*/void lookscore(void) int i,j,k; STU t; total(); avergescore(); system(cls); for(i=0;in-1;i+) for(k=i,j=i+1;jstuk.aver) k=j; if(k!=j) t=stuk; stuk=stui; stui=t; printf(名次t学号tt姓名t高数tC语言t大英t总分t平均分n);for(i=0;in;i+) printf(%dt%stt%st,
11、i+1,stui.number,stui.name); for(j=0;jM;j+) printf(%4.2ft,stui.scorej); /输出成绩 printf(%4.2ft,stui.total); printf(%4.2ft,stui.aver); printf(n);/*通过输入学号查找学生成绩*/void searchscore(void) char a10;int i,j;system(cls);printf(请输入需查询学生学号n);scanf(%s,a);for(i=0;in;i+) if(strcmp(a,stui.number)=0) /比较两个字符串 printf(名
12、次t学号tt姓名t高数tC语言t大英t总分t平均分n); printf(%dt%stt%st,i+1,stui.number,stui.name); for(j=0;jM;j+) printf(%4.2ft,stui.scorej); printf(%4.2ft,stui.total); printf(%4.2ft,stui.aver); printf(n); break; /*找到该学生成绩信息后跳出for循环*/ else printf(未找到该学生信息n);/*记录学生成绩信息,平均分及格率,先进率*/void statistic(void)STU*p=stu;int i,j;float
13、 count=0.0,sum=0.0;system(cls); for(i=0;iaver ; printf(该班级平均分为%4.2fn,sum/n); /*平均分计算*/ for(i=0;iaver=60) count+;printf(该班级及格率为%4.2f%n,count/n*100);/*及格率计算*/count=0.0;for(i=0;iaver=90) count+;printf(该班级先进率为%4.2f%n,count/n*100);/*先进率计算*/printf(平均分低于60学生名单n);for(i=0;in;i+)if(stui.aver60)printf(%sn,stui
14、.name); /*记录不及格学生名单*/ /*修改学生成绩*/ void modify(void) char a10; int i,j; system(cls); printf(请输入需要修改成绩学生学号n); scanf(%s,a); for(i=0;in;i+) if(strcmp(a,stui.number)=0) printf(名次t学号tt姓名t高数tC语言t大英t总分t平均分n); printf(%dt%st%st,i+1,stui.number,stui.name); for(j=0;jM;j+) printf(%4.2ft,stui.scorej); printf(%4.2f
15、t,stui.total); printf(%4.2ft,stui.aver); printf(n); printf(请重新输入该学生学号 姓名:n); scanf(%s,stui.number); scanf(%s,stui.name); printf(请重新输入学生成绩:n); printf(高数tC语言t大英n); for(j=0;jM;j+) scanf(%f,&stui.scorej);/*找到该学生成绩后进行后进行修改,跳出for循环*/printf(修改成功n);break;else printf(请确认该学生与否为本班学生!n); /*添加学生成绩*/ void add(voi
16、d) int a,i,j; system(cls); printf(请输入新增长学生人数:n);scanf(%d,&a);n=n+a;for(i=n-a;in;i+) printf(请输入学生%d学号 姓名:n,i+1); scanf(%s,stui.number); scanf(%s,stui.name); printf(请输入学生成绩:n); printf(高数tC语言t大英n); for(j=0;jM;j+) scanf(%f,&stui.scorej);printf(添加成功n); /*删除学生成绩*/ void delscore(void) int i,j,c; char m,a10
17、; system(cls); printf(请输入学生学号n); scanf(%s,a); for(i=0;in;i+) if(strcmp(a,stui.number)=0) printf(名次t学号tt姓名t高数tC语言t大英t总分t平均分n); printf(%dt%st%st,i+1,stui.number,stui.name);for(j=0;jM;j+)printf(%4.2ft,stui.scorej);printf(%4.2ft,stui.total);printf(%4.2f,stui.aver);printf(n);c=i;break; else printf(未找到该学生
18、信息n); printf(与否删除该学生成绩(y/n)n);scanf(%s,&m);if(m=y) for(i=c;in-1;i+) stui=stui+1; /*构造体整体赋值将最后一位学生成绩信息拷贝进入前一位学生信息存储位置*/ n=n-1; /*删除该学生信息后学生总数减一*/ printf(删除成绩成功n); else printf(删除成绩失败n); /*保存学生成绩*/ void savescore(void) FILE*fp; int i,flag=1; char m; system(cls); puts(与否保存学生成绩(y/n); scanf(%s,&m); if(m=y) if(fp=fopen(score.dat,wb)=NULL) printf(文献打开失败n); return; for(i=0;in;i+) if(fwrite(&stui,sizeof(struct student),1,fp)!=1) printf(保存失败n); flag=0; if(flag=1) printf(保存成功!n); fclose(fp); else return;