c语言课程设计学生成绩管理系统_第1页
c语言课程设计学生成绩管理系统_第2页
c语言课程设计学生成绩管理系统_第3页
c语言课程设计学生成绩管理系统_第4页
c语言课程设计学生成绩管理系统_第5页
免费预览已结束,剩余25页可下载查看

下载本文档

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

文档简介

1、目录学生成绩管理程序题目要求 2设计目的 2总体设计 3详细设计 3调试与测试 12源程序 14总结 30学生成绩管理程序一题目要求1. 问题描述 :对在校学生几门课程的考试成绩进行统一管理 . 每个学生记录包括学号 , 姓名 , 年龄 , 数学 , 英语 , 物理成绩 , 默认以学号为序存放 .2. 要求 :(1) 一个文件按以班为单位存储学生记录 .(2) 将允许的操作分为四种 , 以 A,B ,C,D,E,F 为标志 : A: 插入一个学生记录 ;B: 修改学生记录 ;E: 浏览学生成绩 :F: 退出3. 计算学生的总成绩 .4. 按学号排序输出全班学生成绩表.二设计目的根据题目要求 ,

2、 由于学生信息是存放在文件中 , 所以应提供文件的输入 , 输出等操作 ; 在程序中需要浏览学生的信息 , 应提供显示 , 查找 , 排序等操作 ; 另外还应提供键盘式选择菜单实现功能选择 .三总体设计根据上面的需求分析 , 可以将这个系统分为以下模块 : 输入模块 , 修改模块 , 删除模块 , 查找模块 , 显示模块 .学生成绩管理系统数据输入数据显示数据修改数据删除数据查找四详细设计1. 主函数 :主函数一般设计得比较简单 , 只提供输入 , 处理和输出部分的函数调用 , 其中各功能模块用菜单方式选择 .流程图 :显示一系列功能模块N输入 n, 判断 n 是否是 A-FY根据 n 的值调

3、用各功能模块函数 程序:/#include head.hint menu_select()char c;printf(nn);printf( | 1.增加学生记录5.统计信息 |n);printf( | 2.查询学生记录6.打开文件 |n);printf( | 3.修改学生记录7.保存文件 |n);printf( | 4.学生纪录排序8.显示记录 |n);printf( | 0.退出系统 |n);printf(nn);printf(请选择 (0-8):);c=getchar();getchar();return (c-0);2. 输入模块 :分析:单独看各数据信息 , 学号 , 姓名是字符型

4、, 可以采用字符型数组 ; 分数为整数 , 采用整数 ; 数据信息存放在文件中 , 一条记录对应一个学生 , 既符合习惯又方便信息管理 .如果要存放若干学生信息就用结构体数组:void addrecord(student stud)int i=0,j,num;char str5;if(numstus!=0)printf(已有记录存在是否覆盖 ?(y/n)n);gets(str);if(str0=Y|str0=y)i=0;else i=numstus;printf(请输入增加的学生信息条目数:);scanf(%d,&num);if(i=0)numstus=num;else numstus+=nu

5、m;if(numstuslens)lens+=50;pointer=(student *)realloc(pointer,lens*LEN);printf(请输入学生信息 :n);for(;inumstus;i+)getchar();printf(请输入学号 :);gets(pointeri.number);printf(请输入姓名:);gets();printf(请输入性别 ( 男/ 女 1/0):);gets(pointeri.sex);if(pointeri.sex0=0) strcpy(pointeri.sex,女 );else strcpy(pointeri

6、.sex,男);printf(请输入各科成绩 :( 按“语文,数学,英语,历史,政治”的顺序 ):);studi.score=0;for(j=0;j0)i=menu_select(); /*控制菜单 */switch(i)case 1:addrecord(pointer);break; /*增加学生信息 */case 2:findrecord(pointer);break; /*查询学生信息 */case 3:amendrecord(pointer);break; /*修改学生信息 */case 4:sort(pointer);break; /*学生信息排序 */case 5:statisti

7、c(pointer);break; /*统计信息 */case 6:openfile(pointer);break; /*打开文件 */case 7:writetotext(pointer);break; /*保存文件 */case 8:display(pointer,0,numstus-1);break; /*显示记录 */case 0:if(numstus!=0) printf(是否保存当前记录 ?(y/n);gets(str);if(str0=y|str0=Y)writetotext(pointer);i=-1;break; /*default:printf(退出系统 */请输入数字08

8、:n);i=1; /*输入错误*/printf(tt欢迎再次使用本系统。 nn);display1();3. 修改模块 : 分析 : 用户输入要修改学生的学号 , 根据学生的学号等信息查找学生记录 , 并提示用户修改该记录的哪部分信息 . 根据用户选择修改相应的信息 . 流程图 :输入要修改的学号找到 ?YN显示记录调用修改函,提示没有找到数Y继续 ?N返回主菜单程序:void xiugai()if(fp=fopen(s_score.txt,rb+)=NULL|(fp1=fopen(temp.txt,wb+)=NULL)/* 检查是否出错*/printf(Cannot open this fi

9、le.n);exit(0);printf(nPLease shuru xiugai xuehao:);scanf(%d,&i); getchar();while(fread(&data,sizeof(data),1,fp)=1)j=atoi(data.xuehao);if(j=i)printf(xuehao:%snmingzi:%snnianling:%sn,data.xuehao,data.mingzi,data.nianling);printf(Please shuru mingzi:);gets(data.mingzi);printf(Please shuru shuxue score:

10、);gets(temp);data.score0=atof(temp);printf(Please input yingyu score:);gets(temp);data.score1=atof(temp);printf(Please input wuli score:);gets(temp);data.score2=atof(temp);data.score3=data.score0+data.score1+data.score2; fwrite(&data,sizeof(data),1,fp1);fseek(fp,0L,0); /*将位置指针移到离头文件0 个字节处 */fseek(fp

11、1,0L,0);while(fread(&data,sizeof(data),1,fp1)=1)fwrite(&data,sizeof(data),1,fp);fclose(fp);fclose(fp1);4. 删除模块 :分析 :该模块的功能是 , 用户输入要删除的学生的学号 , 根据学生学号查找记录并删除 . 流程图 :输入要删除的学号找到 ?YN显示记录调用删除函,提示没有找到数Y继续 ?N返回主菜单程序:void deleterecord(student stu,int i) /*int j;删除信息*/while(i=0)for(j=i;jnumstus;j+)stuj=stuj+1

12、;numstus-;printf(删除成功!n);void count(student stud)int i,j;for(i=0;inumstus;i+)studi.index=1;for(j=0;jstudi.score)studi.index+;5. 查找模块 : 需求分析 :该模块的功能是根据输入的学生的姓名查找对应的记录, 找到以后 , 显示相应的学生信息 . 流程图 :输入学生学号是 否 找到 学 生YN 记录显示找到的记录提示没有找到询 问 是否继续N返回主菜单Y 程序:/#include head.hint findrecord(student stud) /*查找信息 */ch

13、ar str2;int i,num;if(numstus=0)printf(没有可被查找的记录 n);return -1;elseprintf(以何种方式查找? n1. 学号 t2.gets(str);if(str0=1) /*按学号查找 */姓名 t3.名次 n);printf(请输入学号 :);gets(str);for(i=0;i=numstus;i+)if(strcmp(str,studi.number)=0)display(stud,i,i);break;else continue;else if(str0=2) /*按姓名查找 */printf(请输入姓名 :);gets(str)

14、;for(i=0;i=numstus;i+)if(strcmp(str,)=0)display(stud,i,i);break;else continue;else if(str0=3) /*按名次查找 */printf(请输入名次 :);scanf(%d,&num);getchar();for(i=0;inumstus)printf(没有查找所要的信息。n);return -1;return i;6. 显示模块 : 需求分析 :该模块的功能是显示所有学生记录信息. 程序:void welcome()printf(t*n);printf(tttt*学 生成 绩管 理 系 统

15、 *ntttt倾情奉献欢迎使用 !n);printf(t* *n);void showtable()printf(-n);printf(均分 t学号 t名次 n);姓名 t性别 t语文 t数学 t英语 t历史 t政治 t总分 t平printf(-n);void display(student stud,int n1,int n2)int i;showtable(); /*显示表头 */for(i=n1;i=n2;i+)printf(%st%st%st%.2ft%.2ft%.2ft%.2ft%.2ft%.2ft%.2ft%dtn,studi.number,,studi.sex

16、,studi.subject0,studi.subject1,studi.subject2,studi.subject3,studi.subject4,studi.score,studi.average,studi.index);/* 通过循环输出数据 */void display1()printf(tt本系统由计科二班制作 nn);printf(tt制作人员列表 : nn);printf(tt殷增锋 ttt邵超 n);printf(nn);getchar();五调试与测试在这次课程设计中, 程序编写过程中遇到了很多的问题, 各种函数的运用也让人头疼,在上机编译运行过程中出现了很多的错误,例如

17、:各种数据类型的定义,函数的调用等等。但最终还是在老师同学的帮助下进行了各种代码的编写与修改 , 最终程序成功的运行。下面是各个模块的界面图(1) 主菜单函数 :(2):输入模块 :(3):显示模块 :(4):删除模块 :(5):查找模块:(6):修改模块 :六程序源#ifndef H_STUDENT_HH#define H_STUDENT_HH#include stdio.h#include string.h#include malloc.h#define LEN sizeof(struct message_student) /*/#define numsubs 5 /*学科数目 */typ

18、edef struct message_student /*结构体定义*/一个结构体数组元素的长度char number6;char name20;char sex4;float subjectnumsubs;float score;float average;int index;student;extern int numstus; /* extern student *pointer; /*学生数目 */指向结构体数组*/extern int lens;int menu_select(); /*函数声明 */int openfile(student stu);int findrecord(

19、student stud);int writetotext(student stud);void welcome();void display1();void showtable();void sort(student stu);void deleterecord(student stu,int i);void addrecord(student stud);void display(student stud,int n1,int n2);void amendrecord(student stud);void count(student stud);void sortnum(student s

20、tud);void sortnum2(student stud);void sortname(student stud);void sortname2(student stud);void sortcount(student stud);void sortcount2(student stud);void statistic(student stud);void display1();#endif/#include head.hint menu_select()char c;printf(nn);printf( | 1.增加学生记录5.统计信息 |n);printf( | 2.查询学生记录6.

21、打开文件 |n);printf( | 3.修改学生记录7.保存文件 |n);printf( | 4.学生纪录排序8.显示记录 |n);printf( | 0.退出系统 |n);printf(nn);printf(请选择 (0-8):);c=getchar();getchar();return (c-0);/#include head.hint findrecord(student stud) /*查找信息 */char str2;int i,num;if(numstus=0)printf(没有可被查找的记录 n);return -1;elseprintf(以何种方式查找? n1. 学号 t2.

22、 姓名 t3.gets(str);if(str0=1) /*按学号查找 */名次 n);printf(请输入学号 :);gets(str);for(i=0;i=numstus;i+)if(strcmp(str,studi.number)=0)display(stud,i,i);break;else continue;else if(str0=2) /*按姓名查找 */printf(请输入姓名 :);gets(str);for(i=0;i=numstus;i+)if(strcmp(str,)=0)display(stud,i,i);break;else continue;el

23、se if(str0=3) /*按名次查找 */printf(请输入名次 :);scanf(%d,&num);getchar();for(i=0;inumstus)printf(没有查找所要的信息。n);return -1;return i;/#includehead.hint openfile(student stu)int i=0,j;FILE *fp;char filename20,str2;if(numstus!=0)printf(已经有记录存在,是否保存?(y/n);gets(str);if(str0=y|str0=Y)writetotext(stu);printf(请输入文件名 :

24、);gets(filename);numstus=0;if(fp=fopen(filename,rb+)=NULL)printf(无法打开该文件 n);return(-1);fscanf(fp,%d,&numstus);fgetc(fp);while(inumstus)fscanf(fp,%s,stui.number);fscanf(fp,%s,);fscanf(fp,%s,stui.sex);for(j=0;jnumsubs;j+)fscanf(fp,%f,&stui.subjectj);fscanf(fp,%f,&stui.score);fscanf(fp,%f,&stu

25、i.average);fscanf(fp,%d,&stui.index);i+;fclose(fp);printf(文件读取成功 n);printf(是否显示纪录 ?(y/n);gets(str);if(str0=y|str0=Y)display(stu,0,numstus-1);return(0);/#include head.hvoid sort(student stud)int i,j=0;char str5;student *p;p=stud;if(numstus=0)printf(没有可供查询的记录 !);while(1)for(i=0;i+)printf(请输入查询方式 :);pr

26、intf((直接输入回车则结束查询操作)printf(1.按照学号 t);printf(2.按照姓名 t);printf(3.按照名次 n);n);gets(str);if(strlen(str)=0) break;if(str0=1)printf(请输入排序次序: n);printf(1.升序排列 t);printf(2.降序排列 n);gets(str);if(str0=1)sortnum2(p);elsesortnum(p);display(stud,0,numstus-1);else if(str0=2)printf(printf(1.printf(2.请输入排序次序:升序排列 t);

27、降序排列 n);n);gets(str);if(str0=1)sortname2(p);elsesortname(p);display(stud,0,numstus-1);else if(str0=3)printf(printf(1.printf(2.请输入排序次序:升序排列 t);降序排列 n);n);gets(str);if(str0=1)sortcount2(p);elsesortcount(p);display(stud,0,numstus-1);else printf(请输入 13);printf(是否退出排序 ?(y/n);gets(str);if(str0=y|str0=Y) b

28、reak;return;void sortnum(student stud)int i,j;student temp;student *p;p=stud;for(i=0;inumstus;i+)for(j=0;j0)temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;void sortnum2(student stud)int i,j;student temp;student *p;p=stud;for(i=0;inumstus;i+)for(j=0;j0)temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;void sortna

29、me(student stud)int i,j;student temp;student *p;p=stud;for(i=0;inumstus;i+)for(j=0;j0)temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;void sortname2(student stud)int i,j;student temp;student *p;p=stud;for(i=0;inumstus;i+)for(j=0;j0)temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;void sortcount(student stud)int

30、i,j;student temp;student *p;p=stud;for(i=0;inumstus;i+)for(j=0;jstudj.index)temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;void sortcount2(student stud)int i,j;student temp;student *p;p=stud;for(i=0;inumstus;i+)for(j=0;jstudj+1.index)temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;/#includehead.hvoid statistic

31、(student stud) /*新增功能,输出统计信息*/int i,j=0,k=0;char c1,str2;float averagenumsubs,sum=0;if(numstus=0)printf(没有可被查找的记录 n);elsewhile(1)printf(下面将统计考试成绩 n);printf(请选择你要统计哪科的成绩1.At2.Bt3.Ct4.Dt5.En);c1=getchar();printf(t一共有个 %d记录 n,numstus); /*总共记录数 */switch(c1)case 1:for(i=0;istudi.subject0) k=i;if(studj.su

32、bject0studi.subject0) j=i;average0=sum/numstus;printf(tprintf(tt科目A 的最高分 :n); /*学号最高分 */:%s姓名:%s分数 :%.2fn,studj.number,,studj.subject0);printf(tprintf(tt科目A 的最低分是 :n); /*学号:%s最低分 */姓名:%s分数 :%.2fn,studk.number,,studk.subject0);printf(t科目 A 的平均分是 %5.2fn,average0); /*平均分 */break;cas

33、e 2:for(i=0;istudi.subject1) k=i;if(studj.subject1studi.subject1) j=i;average1=sum/numstus;printf(t科目 B 的最高分 :n); /*最高分 */printf(tt学号:%s姓名:%s分数 :%.2fn,studj.number,,studj.subject1);printf(t科目 B 的最低分是 :n); /*最低分 */printf(tt学号:%s姓名:%s分数 :%.2fn,studk.number,,studk.subject1);printf(t

34、科目 B 的平均分是 %5.2fn,average1); /*平均分 */break;case 3:for(i=0;istudi.subject2) k=i;if(studj.subject2studi.subject2) j=i;average2=sum/numstus;printf(t科目 C 的最高分 :n); /*最高分 */printf(tt学号:%s姓名:%s分数 :%.2fn,studj.number,,studj.subject2);printf(t科目 C 的最低分是 :n); /*最低分 */printf(tt学号:%s姓名:%s分数 :%.2fn,studk.number,,studk.subject2);printf

温馨提示

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

评论

0/150

提交评论