c语言学生成绩管理系统.doc_第1页
c语言学生成绩管理系统.doc_第2页
c语言学生成绩管理系统.doc_第3页
c语言学生成绩管理系统.doc_第4页
c语言学生成绩管理系统.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

青 岛 农 业 大 学本 科 生 课 程 论 文论 文 题 目 学生成绩管理系统 学生专业班级 通信工程1001 学生姓名(学号) 李庆坤(20101794) 指 导 教 师 于爱华 完 成 时 间 2011-09-06 2011 年 9 月 14 日学生成绩管理系统摘要 21世纪以来,人类经济高速发展,人们发生了日新月异的变化,特别是计算机的应用及普及到经济和社会生活的各个领域。为了适应现代社会人们高度强烈的时间观念,学校信息管理系统软件为学校的办公带来了极大的方便,而学生成绩管理系统更是这些软件中的佼佼者。本文详细给出了学习成绩管理系统的设计、功能、程序以及调试运行与显示情况。一、 任务与分析学习成绩管理系统功能要求:输入记录模块、查询记录模块、更新记录模块、统计记录模块、输出记录模块。程序中涉及结构体、单链表、文件等方面的知识。本系统由结构体、数组、函数、文件、指针等组成,通过调用各种函数,利用菜单实现了各项功能。程序将数据储存在.txt文件中,可以方便的读取与写入。本程序增设密码功能防止被人窃取数据,此外由信息维护菜模块、信息查询模块、成绩统计模块、成绩排序模块共同组成,分为教师和学生用户共同完成对学习成绩的管理。其详细流程图如下:返回主菜单个人成绩查询用户名及密码修改返回主菜单成绩排序成绩查询信息查询信息维护用户名及密码修改学生教师选择用户菜单信息维护菜单下设子菜单:添加学生信息、修改学生信息、删除学生信息、复制账单信息、清空信息记录。信息查询菜单下设子菜单:查询文件总数、查询所有信息、按姓名查询信息、按学号查询信息。二、 程序设计1. 程序介绍此学习成绩管理系统分为两个用户,即教师用户和学生用户,教师用户可以用此程序完成学生成绩的维护、查询、统计等各项功能,而学生用户可以完成对学生本人信息的查询。程序自动将教师用户信息自动保存在f1.txt文件中,将学生用户信息自动保存在f2.txt文件中,将学生成绩信息自动保存在list.txt文件中,数据不随程序的关闭而消失。2.函数调用 inputchoice() 教师用主菜单 inputchoice_stu() 学生用主菜单 inputchoice1() 教师用信息维护菜单 inputchoice2() 教师用信息查询菜单 Enter() 用户登录 Modify() 密码及用户名修改 getlogcount() 获取文件记录总数 ListAllLog() 读取所有信息(教师使用) read_name() 按姓名查询信息(教师使用) read_num() 按学号查询信息(教师使用) find_stu() 个人信息查询(学生使用) Addnewlog() 添加学生信息(教师使用) change() 修改信息 del() 删除信息(教师使用) copy() 复制账单(教师使用) delet() 清空账单信息(教师使用) order() 账单信息排序(教师使用) sort() 排序关键字选择(教师使用) census1() 学生信息统计(教师使用) census() 学生信息统计选择菜单(教师使用) choice_user() 用户类型选择 choice1() 信息维护菜单选择操作(教师使用) choice2() 信息查询菜单选择操作(教师使用) choice() 主菜单选择操作3.功能模块分析(1)头文件、结构体定义#includestdio.h#includestdlib.h#includestring.h#includewindows.h#define M 20 /学生人数long size,Size; /结构体长度char ch15; /保存登陆的学生学号typedef struct LogData char logid10; /记录学号char name10; /姓名double Xinhao; /信号double Modian; /模电double English; /英语ListNode;typedef struct node char pass10; /密码char name10; /用户名Node;(2)菜单选择模块以信息维护菜单(教师使用)为例:通过调用函数inputchoice1(),在屏幕上显示void inputchoice1() printf( # 信息维护菜单#n # 0:退出信息维护 #n # 1:返回信息维护菜单 #n # 2:添加学生信息 #n # 3:修改学生信息 #n # 4:删除学生信息 #n # 5:复制账单信息 #n # 6:清空信息记录 #n #nn);用switch选择菜单选项,再调用函数void choice2(FILE *fp)int choice; while (choice!=0) printf( 请选择信息查询所需功能:); scanf(%d,&choice); switch(choice) case 1: /返回信息查询菜单 inputchoice2(); break; case 2: /查询文件记录总数 getlogcount(fp);break; case 3: /查询所有信息 ListAllLog(fp); break; case 4: /按姓名查询信息 read_name(fp); break; case 5: /按学号查询信息 read_num(fp);break; default: printf( 输入序号错误或则你选择了退出查询功能,程序将自动返回主菜单选择功能!n); inputchoice();break; (3)用户名及密码模块此模块有力的保证了系统用户数据的安全性。用户登录时,密码验证:printf( 请输入用户名:); scanf(%s,a); getchar(); printf( 请输入密码:); scanf(%s,b); for(int t=0;t10;t+) cht=at;/将登录成功的用户名保存在全局变量中 while(success=1|ji-1) m=strcmp(,a); n=strcmp(logj.pass,b); j+; if(m=0&n=0) success=1; break; *s=j;/保存用户名的位置 if(success=1)printf( * 登录成功,进入学生成绩管理系统!*n); else printf( * 用户名不存在或密码错误!请重新登录!*n);密码即用户名修改:int Modify(FILE *fp1,FILE *fp2,int k)/密码及用户名修改int i=0,j=0,success=0; Node logM;int s=0;char name10;char password10,password110;char name110, password210; if(k=1)/获取教师密码文件信息 if(fp1=fopen(f1.txt,r)=NULL) printf( can not open file f1.txt!n); exit(0); fseek(fp1,Size+4,SEEK_SET); while (!feof(fp1) fscanf(fp1,%s%s,,logi.pass); i+; if(k=2)/获取学生密码文件信息 if(fp2=fopen(f2.txt,r)=NULL) printf( can not open file f2.txt!n); exit(0); fseek(fp2,Size+4,SEEK_SET); while (!feof(fp2) fscanf(fp2,%s%s,,logi.pass); i+; printf( *正在进入密码修改界面!*n); printf( * 请先输入原用户名及密码再进行修改!*n); if(Enter (fp1,fp2,k,&s)!=0) if(k=1) if(fp1=fopen(f1.txt,w)=NULL) printf( errorn); exit(0); if(k=2) if(fp2=fopen(f2.txt,w)=NULL) printf( errorn); exit(0); if(k=1) printf( 请输入新的用户名(不超过十个字符,汉字按两个字符计算):n); scanf(%s, name); if(k=2)/学生用户只能更改密码 printf( 学生用户名只能使用学号,不允许修改!n); printf( 请输入新的密码(不超过十个字符,汉字按两个字符计算):n); scanf(%s,password); printf( 请再次输入密码确认:); scanf(%s,password1); if(strcmp(password,password1)=0)/修改成功,写入新用户名及密码 printf( * 密码输入正确! *n); for(int t=0;t10;t+) if(k=1)t=namet; logs-1.passt=passwordt; fseek(fp1,0,SEEK_SET); if(k=1) fprintf(fp1, 用户名 密码n); if(k=2) fprintf(fp2, 用户名 密码n); for(t=0;t0&success=0) count-; fscanf(cfptr,%s%s%lf%lf%lf,,&log.logid,&log.Xinhao,&log.Modian,&log.English); if( (strcmp(,a)=0&choice=1)|(strcmp(log.logid,a)=0&choice=2) printf( * 修改前的信息 *n); printf( 姓名 学号 信号 模电 英语n); printf( %10s %10s %3.1lf %3.1lf %3.1lfn,,log.logid,log.Xinhao,log.Modian,log.English); printf( 0.修改所有关键字,,修改语文,修改数学,修改英语); scanf(%d,&b); if(b=1) printf( 请输入修改后的信号成绩:); scanf(%lf,&log.Xinhao); else if(b=2) printf( 请输入修改后的模电成绩:); scanf(%lf,&log.Modian); else if(b=3) printf( 请输入修改后的英语成绩:); scanf(%lf,&log.English); else if(b=0) printf( 请输入修改后的信息n); printf( -请依次输入 姓名 学号 信号 模电 英语-n); scanf(%s%s%lf%lf%lf,,&log.logid,&log.Xinhao,&log.Modian,&log.English); elseprintf( 您输入的指令符错误,程序自动返回信息维护界面!n);return; fseek(cfptr,-size+1,SEEK_CUR); fprintf(cfptr,%10s %8s %3.1lf %3.1lf %3.1lfn,,log.logid,log.Xinhao,log.Modian,log.English); success=1; printf( * 信息修改成功 *n); fclose(cfptr); if(success=0) printf( * 信息修改失败 *n);删除学生信息:void del(FILE *fp)FILE *fp1;long count,n; int i=0,j=0;char a20,b100= 姓名 学号 信号 模电 英语n; ListNode logM; char c; int m=0; if(fp=fopen(list.txt,r)=NULL) printf( can not open file list.txt!n); exit(0); if(fp1=fopen(copy.txt,w)=NULL) printf( can not open file list.txt!n); exit(0); while(!feof(fp) c=fgetc(fp); fputc(c,fp1); fclose(fp);fclose(fp1); if(fp=fopen(list.txt,w)=NULL) printf( can not open file list.txt!n); exit(0); if(fp1=fopen(copy.txt,r)=NULL) printf( can not open file list.txt!n); exit(0); count=getlogcount(fp1); n=count; fseek(fp1,size,SEEK_SET); while (count0&iM) count-; fscanf(fp1,%s%s%lf%lf%lf,,&logi.logid,&logi.Xinhao,&logi.Modian,&logi.English); i+;printf( 请输入要删除的姓名或学号:n);scanf(%s,&a); while(bj!=0) c=bj; fputc(c,fp); j+; for(i=0;in;i+) if (strcmp(,a)!=0&strcmp(logi.logid,a)!=0) fprintf(fp,%10s %8s %3.1lf %3.1lf %3.1lfn,,logi.logid,logi.Xinhao,logi.Modian,logi.English); m+; if(m0) count-; fscanf(cfptr,%s%s%lf%lf%lf,,log.logid,&log.Xinhao,&log.Modian,&log.English); printf( %10s %10s %3.1lf %3.1lf %3.1lfn,,log.logid,log.Xinhao,log.Modian,log.English); 按姓名查询信息:void read_name(FILE *cfptr) char a20;ListNode log;long count;printf( 请输入姓名:n);scanf(%s,&a); count=getlogcount(cfptr);fseek(cfptr,size,SEEK_SET); while (count0) count-; fscanf(cfptr,%s%s%lf%lf%lf,,&log.logid,&log.Xinhao,&log.Modian,&log.English); if (strcmp(,a)=0) printf( 姓名 学号 信号 模电 英语n); printf( %10s %10s %3.1lf %3.1lf %3.1lfn,,log.logid,log.Xinhao,log.Modian,log.English); return; printf( * 格式输入错误或记录不存在!*n);按学号查询成绩:void read_num(FILE *cfptr) char a20;ListNode log;long count;printf( 请输入学号:n);scanf(%s,&a); count=getlogcount(cfptr);fseek(cfptr,size,SEEK_SET); while (count0) count-; fscanf(cfptr,%s%s%lf%lf%lf,,log.logid,&log.Xinhao,&log.Modian,&log.English); if (strcmp(log.logid,a)=0) printf( 姓名 学号 信号 模电 英语n); printf( %10s %10s %3.1lf %3.1lf %3.1lfn,,log.logid,log.Xinhao,log.Modian,log.English); return; printf( * 格式输入错误或记录不存在!*nn);(6)成绩统计模块此模块可以显示各科目的各分数段的学生名单,并且还可以统计最高分,最低分,及格人数,优秀人数以及及格率和优秀率,很方便教师的统计工作。选择科目菜单:void census (FILE *cfptr)long count,n; int i=0;int choice; ListNode logM; printf( * 学生信息统计界面:*n); count=getlogcount(cfptr); n=count; fseek(cfptr,size,SEEK_SET); while (count0&i=1&choiceb) c=a;a=b;b=c;/如果a大于b将ab交换 if(a100|b100) printf( 分数段输入错误,程序自动返回!n); return; for(i=0;iM;i+) log1i.Xinhao=logi.Xinhao; log2i.Xinhao=logi.Xinhao; log1i.English=logi.English; log2i.English=logi.English; log1i.Modian=logi.Modian; log2i.Modian=logi.Modian; for(j=0;j=0;i-) if(choice=1) if(logi.Xinhao =a ) /统计分数段内的人数 mj=i;j+; if (logi.Xinhao =60)/统计及格人数 k+; if (logi.Xinhao =80)/统计优秀(大于八十分)人数 l+; if(logi.Xinhao logi-1.Xinhao ) /统计信号最高分 max=log1i.Xinhao; log1i.Xinhao=log1i-1.Xinhao; log1i-1.Xinhao=max; if(choice=2) if(logi.Modian =a ) mj=i;j+; if (logi.Modian =60)/统计及格人数 k+; if (logi.Modian =80)/统计优秀(大于八十分)人数 l+; if(logi.Modian logi-1.Modian ) /统计模电最高分 max=log1i.Modian; log1i.Modian=log1i-1.Modian; log1i-1.Modian=max; if(choice=3) if(logi.English =a ) mj=i;j+; if (logi.English =60)/统计及格人数 k+; if (logi.English =80)/统计优秀(大于八十分)人数 l+; if(logi.English logi-1.English ) /统计英语最高分 max=log1i.English; log1

温馨提示

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

评论

0/150

提交评论