学生成绩管理系统 C语言课程设计报告材料

上传人:沈*** 文档编号:83447125 上传时间:2022-05-01 格式:DOC 页数:39 大小:244KB
返回 下载 相关 举报
学生成绩管理系统 C语言课程设计报告材料_第1页
第1页 / 共39页
学生成绩管理系统 C语言课程设计报告材料_第2页
第2页 / 共39页
学生成绩管理系统 C语言课程设计报告材料_第3页
第3页 / 共39页
点击查看更多>>
资源描述
word学生成绩管理系统课程设计报告专 业:信息科学与工程学院 班 级: 电气信息类0916班 姓 名: 坤 指导教师: 汤哲 学 号: 0909091612 课程设计报告一、 课程设计题目学生成绩管理系统1、需要处理的根底数据 学生根本信息:如班级、学号、性别、年龄等。 学生选修课程的根本信息:课程编号、课程名称、学分、考试成绩、平时成绩、综合成绩考试成绩*0.7+平时成绩*0.3等。主菜单2、系统的根本功能 数据的录入:如录入学生的根本信息,以与该学生选修课程的根本信息; 数据的修改:如修改指定学号、或者指定的学生信息,或者修改其选修课程信息; 数据的插入:插入某个学生信息; 数据的查询:如按学号查询、按查询等; 数据的删除:如删除指定学号、或者指定的学生与其选修课程信息; 平均成绩的计算:计算每个学生各门功课的平均成绩,并按平均成绩从高到低的次序输出学生信息; 列出不与格学生清单学号、不与格的课程和成绩。 考虑用文件把数据保存起来可选。3、链表struct stu /*定义学生根本信息结构体*/int i; /*以输入的顺序来确定的学生序号*/char num11;char classnum5;char name128;char sex32;int age;float ave;struct stu *next;int n=0; /*学生人数*/struct stu *head=0;struct stu1 /*定义学生选修课信息结构体*/char lessonnum11;char lessonname256;float score;float testgrade;float mongrade;float grade;struct stu1 *next;int m;struct stu1 *amax_num ;/*定义一个指针数组来记住课程链表地址*/*- 数据的录入程序 -*/void create(void) /*建立学生根本信息链表*/ n=0;struct stu *p1,*p2;char ch,ch1;struct stu1 *create1(void); do n=n+1; an=0; system(cls); p1=(struct stu *)malloc(LEN); printf(n学号:); scanf(%s,p1-num); printf(n班级:); scanf(%s,p1-classnum); printf(n:); scanf(%s,p1-name) ; printf(n性别:); scanf(%s,p1-sex); printf(n年龄:); scanf(%d,&p1-age); if(n=1)head=p1;else p2-next=p1; p2=p1; printf(n是否输入选修课信息y/nn); fflush(stdin); /*清空输入缓冲区*/ ch1=getchar();if(ch1=y|ch1=Y) an=create1(); /*根据序号来记忆课程链表地址*/ p1-i=n; system(cls); printf(n是否继续输入另一学生信息(y/n)n); fflush(stdin); /*清空输入缓冲区*/ ch=getchar(); while(ch=y|ch=Y); p2-next=0;struct stu1 *create1(void) /*建立课程链表*/ m=0;struct stu1 *p1,*p2;char ch;struct stu1 *head=0;do m=m+1; system(cls); p1=(struct stu1 *)malloc(LEM); printf(n课程编号:); scanf(%s,p1-lessonnum); printf(n课程名称:); scanf(%s,p1-lessonname); printf(n学分:); scanf(%f,&p1-score); printf(n考试成绩:); scanf(%f,&p1-testgrade); printf(n平时成绩:); scanf(%f,&p1-mongrade); p1-grade=p1-testgrade*0.7+p1-mongrade*0.3; printf(n综合成绩:%-6.1f,p1-grade);if(m=1)head=p1;else p2-next=p1; p2=p1; printf(n是否继续输入另一课程信息(y/n)n); fflush(stdin); /*清空输入缓冲区*/ ch=getchar(); while(ch=y|ch=Y); p2-next=0;return(head);二、 设计思路界面:界面的显示由循环语句和switch语句来控制完成。数据的录入:运用链表进展数据的存储,由于要录入的数据有两种即学生的根本信息和学生的选修课程信息,本系统采用两个链表分别存储数据,采用数组将两个链表联系起来,运用循环语句和判断语句来进展数据的录入。作者感到本功能设计中的难点在于将两个链表联系起来,解决方案是采用一个指针数组来将第二个链表中每个节点地址存储起来,进而将两个链表联系起来。信息的修改:本系统采用的是按学号查找信息,系统采用一个由判断语句和循环语句构成的查询函数struct stu *findnum(void)来提供信息存储地址;再按照地址来进展修改,其中采用switch语句和循环语句来控制使系统能够提供选择修改的功能。在这一功能的设计中,作者感到课程信息的修改中的添加课程信息功能是一个难点,解决方案是按插入方案来进展设计。插入信息:本系统采用的是按学号顺序来进展插入的,在这一功能的设计中,首先在开辟一个结构体空间将插入学生的信息存储于其中,在采用判断语句和循环语句来查找该条信息应该插入位置的地址,将上一结点的下行指针指向本结点,再将该节点的下行指针指向下一个结点从而达到插入信息的目的。在这一功能的设计中作者感到插入的具体算法是个难点,本系统采用的教材书本上的方法。查询信息:本功能实现是调用struct stu *findnum(void)函数查找该条信息的地址,然后再采用for循环进展信息的输出,本功能的实现比拟简单,难点在于对函数的调用的灵活运用。删除信息:系统采用按学号删除的方案,在这一功能的设计中我没有采用直接调用struct stu *findnum(void)函数,而是又重写查找地址程序,这是出于考虑系统功能的更好实现而采用的举措。具体删除算法采用该节点上一个结点的下行指针直接指向该结点下一个结点从而达到删除该结点的目的。在此功能的设计中,本作者感到难点不在于算法而在于思维设计的是否缜密。计算平均成绩:本功能的实现需要首先计算各个学生的平均成绩,再按照平均成绩进展排序。这两个过程的设计排序是个难点,因为本系统存储结构为链表,在排序方面较数组有很大区别,在作者看来比拟困难,解决方案是运用一个指针型数组将每个结点的地址存在其中,再按照该指针指向的平均成绩来排序数组中的地址,再按照数组中的地址顺序来输出信息,间接达到排序的目的。不与格学生清单:判断语句和循环语句的结合运用以达到列出清单的目的,本功能的实现不难,难在于准确控制。三、 系统流程主函数界面输入学生信息修改学生信息查询学生信息删除学生信息插入学生信息计算平均分列出不与格学生清单保存到文件四、 程序代码#include#include#include#define LEN sizeof(struct stu)#define LEM sizeof(struct stu1) #define max_num 256struct stu /*定义学生根本信息结构体*/ int i; /*以输入的顺序来确定的学生序号*/ char num11; char classnum5; char name128; char sex32; int age; float ave; struct stu *next; int n=0; /*学生人数*/ struct stu *head=0;struct stu1 /*定义学生选修课信息结构体*/ char lessonnum11; char lessonname256; float score; float testgrade; float mongrade; float grade; struct stu1 *next;int m;struct stu1 *amax_num ;/*定义一个指针数组来记住课程链表地址*/ /*- 数据的录入程序 -*/ void create(void) /*建立学生根本信息链表*/ n=0; struct stu *p1,*p2; char ch,ch1; struct stu1 *create1(void); do n=n+1; an=0; system(cls); p1=(struct stu *)malloc(LEN); printf(n学号:); scanf(%s,p1-num); printf(n班级:); scanf(%s,p1-classnum); printf(n:); scanf(%s,p1-name) ; printf(n性别:); scanf(%s,p1-sex); printf(n年龄:); scanf(%d,&p1-age); if(n=1)head=p1; else p2-next=p1; p2=p1; printf(n是否输入选修课信息y/nn); fflush(stdin); /*清空输入缓冲区*/ ch1=getchar(); if(ch1=y|ch1=Y) an=create1(); /*根据序号来记忆课程链表地址*/ p1-i=n; system(cls); printf(n是否继续输入另一学生信息(y/n)n); fflush(stdin); /*清空输入缓冲区*/ ch=getchar(); while(ch=y|ch=Y); p2-next=0;struct stu1 *create1(void) /*建立课程链表*/ m=0; struct stu1 *p1,*p2; char ch; struct stu1 *head=0; do m=m+1; system(cls); p1=(struct stu1 *)malloc(LEM); printf(n课程编号:); scanf(%s,p1-lessonnum); printf(n课程名称:); scanf(%s,p1-lessonname); printf(n学分:); scanf(%f,&p1-score); printf(n考试成绩:); scanf(%f,&p1-testgrade); printf(n平时成绩:); scanf(%f,&p1-mongrade); p1-grade=p1-testgrade*0.7+p1-mongrade*0.3; printf(n综合成绩:%-6.1f,p1-grade); if(m=1)head=p1; else p2-next=p1; p2=p1; printf(n是否继续输入另一课程信息(y/n)n); fflush(stdin); /*清空输入缓冲区*/ ch=getchar(); while(ch=y|ch=Y); p2-next=0; return(head);/*-*/struct stu *findnum(void) char num11; struct stu *p1; struct stu1 *p2; char c; printf(n输入学生学号:); fflush(stdin); gets(num); struct stu *fa; fa=head; if(head=0) printf(nlist nulln);goto end; while(strcmp(fa-num,num)!=0) if(fa-next=0)break; fa=fa-next; if(strcmp(fa-num,num)=0)return fa; else printf(%s cant be found!n,num); end: return 0;/*- 查询信息模块 -*/void search(void) system(cls); char ch2; struct stu *findnum(void); struct stu *p; struct stu1 *p1; p=findnum(); if(p=0) goto end; p1=ap-i; printf(n%17s,学号); printf(%15s,班级); printf(%16s,); printf(%15s,性别); printf(%15s,年龄); printf(n%17s,p-num); printf(%15s,p-classnum); printf(%16s,p-name) ; printf(%15s,p-sex); printf(%15d,p-age); printf(n*); printf(n%11s,课程编号); printf(%19s,课程名称); printf(%9s,学分); printf(%13s,考试成绩); printf(%13s,平时成绩); printf(%13s,综合成绩); for(;p1!=0;) printf(n%11s,p1-lessonnum); printf(%19s,p1-lessonname); printf(%9.1f,p1-score); printf(%13f,p1-testgrade); printf(%13f,p1-mongrade); printf(%13f,p1-grade); p1=p1-next; end: printf(n按任意键退出); ch2=getchar();/*-修改模块-*/ void modify(void) struct stu *findnum(void); char selmenu,selmenu1; system(cls); char ch2; char ch3; char ch4; char ch6; char ch7; char ch8; struct stu *findnum(void); struct stu *p; struct stu1 *p1; struct stu1 *p2; char lessonno11; p=findnum(); if(p=0) printf(n按任意键退出); fflush(stdin); scanf(%c,&ch2); else p1=ap-i; printf(n%17s,学号); printf(%15s,班级); printf(%16s,); printf(%15s,性别); printf(%15s,年龄); printf(n%17s,p-num); printf(%15s,p-classnum); printf(%16s,p-name) ; printf(%15s,p-sex); printf(%15d,p-age); printf(n*); printf(n%11s,课程编号); printf(%19s,课程名称); printf(%9s,学分); printf(%13s,考试成绩); printf(%13s,平时成绩); printf(%13s,综合成绩); for(;p1!=0;) printf(n%11s,p1-lessonnum); printf(%19s,p1-lessonname); printf(%9.1f,p1-score); printf(%13f,p1-testgrade); printf(%13f,p1-mongrade); printf(%13f,p1-grade); p1=p1-next; p1=ap-i; printf(n按任意键开始修改); scanf(%c,&ch2);do system(cls); printf(nn); printf(ttt1.修改学号); printf(tt2.修改班级n); printf(ttt3.修改); printf(tt4.修改性别n); printf(ttt5.修改年龄); printf(tt6.修改选修课程信息n); printf(ttt0.退出); printf(nttt请输入功能选择编号0-6:); scanf(%c,&selmenu); switch(selmenu) case 1: system(cls);printf(学号:%s,p-num);printf(n输入新的数据:);scanf(%s,p-num);printf(n修改成功!n按任意键退出);fflush(stdin);scanf(%c,&ch8); break; case 2: system(cls);printf(班级:%s,p-classnum);printf(n输入新的数据:);scanf(%s,p-classnum);printf(n修改成功!n按任意键退出);fflush(stdin); scanf(%c,&ch8); break; case 3: system(cls);printf(:%s,p-name);printf(n输入新的数据:);scanf(%s,p-name);printf(n修改成功!n按任意键退出);fflush(stdin); scanf(%c,&ch8); break; case 4: system(cls);printf(性别:%s,p-sex);printf(n输入新的数据:);scanf(%s,p-sex);printf(n修改成功!n按任意键退出);fflush(stdin); scanf(%c,&ch8); break; case 5: system(cls);printf(年龄:%d,p-age); printf(n输入新的数据:);scanf(%d,&p-age); printf(n修改成功!n按任意键退出);fflush(stdin); scanf(%c,&ch8); break; case 6: dosystem(cls);printf(nnttt1.添加选修课程信息);printf(tt2.修改已有课程信息);printf(nttt0.退出);printf(nttt请输入功能选择编号0-2:);fflush(stdin);scanf(%c,&ch6);if(ch6=0) break; if(ch6=1) p2=(struct stu1 *)malloc(LEM); printf(nttt课程编号:); scanf(%s,p2-lessonnum); printf(nttt课程名称:); scanf(%s,p2-lessonname); printf(nttt学分:); scanf(%f,&p2-score); printf(nttt考试成绩:); scanf(%f,&p2-testgrade); printf(nttt平时成绩:); scanf(%f,&p2-mongrade); p2-grade=p2-testgrade*0.7+p2-mongrade*0.3; printf(nttt综合成绩:%-6.1f,p2-grade);p2-next=p1;ap-i=p2;p1=ap-i;printf(nttt按任意键退出);fflush(stdin);scanf(%c,&ch7) ; if(ch6=2) if(p1=0) printf(无任何课程信息);goto end; printf(nn输入要修改课程的编号:); fflush(stdin); scanf(%s,lessonno); while(strcmp(p1-lessonnum,lessonno)!=0) if(p1-next=0)break; p1=p1-next; if(strcmp(p1-lessonnum,lessonno)=0) printf(n%11s,课程编号); printf(%19s,课程名称); printf(%9s,学分); printf(%13s,考试成绩); printf(%13s,平时成绩); printf(%13s,综合成绩); printf(n%11s,p1-lessonnum); printf(%19s,p1-lessonname); printf(%9.1f,p1-score); printf(%13f,p1-testgrade); printf(%13f,p1-mongrade); printf(%13f,p1-grade); printf(n按任意键进展修改); fflush(stdin); scanf(%c,&ch3); do system(cls); printf(nn); printf(ttt1.修改课程编号); printf(tt2.修改课程名称n); printf(ttt3.修改学分); printf(tt4.修改考试成绩n); printf(ttt5.修改平时成绩); printf(ttt0.退出); printf(nttt请输入功能选择编号0-5:); scanf(%c,&selmenu1); switch(selmenu1) case 1:printf(n输入新的课程编号:);scanf(%s,p1-lessonnum);printf(n修改成功!n按任意键退出);fflush(stdin);scanf(%c,&ch8); break; case 2: printf(n输入新的课程名称:);scanf(%s,p1-lessonname);printf(n修改成功!n按任意键退出);fflush(stdin);scanf(%c,&ch8);break;case 3:printf(n输入新的学分:);scanf(%f,&p1-score);printf(n修改成功!n按任意键退出);fflush(stdin);scanf(%c,&ch8); break; case 4: printf(n输入新的考试成绩:);scanf(%f,&p1-testgrade); printf(n修改成功!n按任意键退出);fflush(stdin);scanf(%c,&ch8);break;case 5:printf(n输入新的平时成绩:);scanf(%f,&p1-mongrade);printf(n修改成功!n按任意键退出);fflush(stdin);scanf(%c,&ch8); break; p1-grade=p1-testgrade*0.7+p1-mongrade*0.3; while(selmenu1!=0); else printf(找不到%sn,lessonno); end: ; printf(n是否继续修改或添加另一选修课信息y/n); fflush(stdin); scanf(%c,&ch4); while(ch4=Y|ch4=y); while(selmenu!=0); /*-插入模块-*/void insert(void) struct stu1 *create1(void) ; char ch5; system(cls); struct stu *p1,*p2,*p; p1=p2=head; p=(struct stu *)malloc(LEN); printf(输入要插入的学生的学号:); scanf(%s,p-num); if(head=0) head=p; p-next=0; else if(strcmp(p-num,head-num)next=head; head=p; else while(p1-next!=0&strcmp(p-num,p1-num)0) p2=p1; p1=p1-next; if(strcmp(p-num,p1-num)0) p1-next=p; p-next=0; else p2-next=p; p-next=p1; printf(n输入插入学生的具体信息); printf(n学号:%s,p-num); printf(n班级:); scanf(%s,p-classnum); printf(n:); scanf(%s,p-name) ; printf(n性别:); scanf(%s,p-sex); printf(n年龄:); scanf(%d,&p-age); printf(n是否输入选修课信息y/n); fflush(stdin); /*清空输入缓冲区*/ scanf(%c,&ch5); p-i=n+1; if(ch5=y|ch5=Y) an+1=create1(); n+;/*-删除模块-*/void del(void)system(cls);char no11;struct stu *p1,*p2;struct stu1 *p;char ch; p1=head;p2=head;printf(n输入要删除学生信息的学号:);scanf(%s,no);if(head=0) printf(list null);goto end;while(strcmp(p1-num,no)!=0) if(p1-next=0) break; p2=p1; p1=p1-next; if(strcmp(no,p1-num)=0) p=ap1-i; printf(n%17s,学号); printf(%15s,班级); printf(%16s,); printf(%15s,性别); printf(%15s,年龄); printf(n%17s,p1-num); printf(%15s,p1-classnum); printf(%16s,p1-name) ; printf(%15s,p1-sex); printf(%15d,p1-age); printf(n*); printf(n%11s,课程编号); printf(%19s,课程名称); printf(%9s,学分); printf(%13s,考试成绩); printf(%13s,平时成绩); printf(%13s,综合成绩); for(;p!=0;) printf(n%11s,p-lessonnum); printf(%19s,p-lessonname); printf(%9.1f,p-score); printf(%13.1f,p-testgrade); printf(%13.1f,p-mongrade); printf(%13.1f,p-grade); p=p-next; printf(n按任意键进展删除); fflush(stdin); scanf(%c,&ch); if(head=p1) head=p1-next; else p2-next=p1-next; free(ap1-i); free(p1); -n; system(cls); printf(n删除成功!); printf(n按任意键退出); scanf(%c,&ch); else printf(%s 找不到!n,no);end: ;/*-求平均模块-*/void average(void)system(cls);struct stu *p,*pa;struct stu *bmax_num=0;struct stu1 *p1;int k,j;float sum;char ch;if(head=0) printf(n无学生信息,请先输入学生信息); goto end;for(p=head;p!=0;p=p-next) /*求每个学生的平均成绩*/ p1=ap-i; if(p1=0) p-ave=0; else for(j=0,sum=0;p1!=0;j+) sum=sum+p1-grade; p1=p1-next; p-ave=sum/j; for(p=head,k=0;p!=0;k+) /*把链表中各指针放入数组中*/ bk=p;p=p-next;for(k=0;bk!=0;k+) /*按照平均分的上下来存放各指针*/ for(j=k+1;bj!=0;j+)if(bk-aveave)pa=bk;bk=bj;bj=pa;for(k=0;bk!=0;k+) /*按顺序输出学生信息*/ p1=abk-i; printf(n%12s,学号); printf(%15s,班级); printf(%12s,); printf(%10s,性别); printf(%10s,年龄); printf(%12s,平均成绩); printf(n%12s,bk-num); printf(%15s,bk-classnum); printf(%12s,bk-name) ; printf(%10s,bk-sex); printf(%10d,bk-age); printf(%12f,bk-ave); printf(n%11s,课程编号); printf(%19s,课程名称); printf(%9s,学分); printf(%13s,考试成绩); printf(%13s,平时成绩); printf(%13s,综合成绩); for(;p1!=0;) printf(n%11s,p1-lessonnum); printf(%19s,p1-lessonname); printf(%9.1f,p1-score); printf(%13f,p1-testgrade); printf(%13f,p1-mongrade); printf(%13f,p1-grade); p1=p1-next; printf(n*);end:printf(n按任意键退出);fflush(stdin);scanf(%c,&ch);/*-求不与格清单模块-*/void falist(void)system(cls);int j,k;struct stu *p;struct stu1 *p1;char ch;for(p=head,k=0;p!=0;p=p-next)for(p1=ap-i,j=0;p1!=0;p1=p1-next)if(p1-gradename);printf(n学号:%s,p-num);printf(n%11s,课程编号); printf(%19s,课程名称); printf(%9s,学分); printf(%13s,考试成绩); printf(%13s,平时成绩); printf(%13s,综合成绩); for(p1=ap-i;p1!=0;p1=p1-next) if(p1-gradelessonnum); printf(%19s,p1-lessonname); printf(%9.1f,p1-score); printf(%13f,p1-testgrade); printf(%13f,p1-mongrade); printf(%13f,p1-grade); printf(n*);if(k=0)printf(不与格的清单为空.);printf(n按任意键退出);fflush(stdin);scanf(%c,&ch);/*-保存模块-*/ void save(void)/*将数据存入文件中*/FILE *fp;/*定义一个指向文件的指针*/struct stu *p;/*定义一个指向学生根本信息链表的指针*/struct stu1 *p1;/*定义一个指向课程链表的指针*/ char ch;char filename20;if(n=0)
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!