学生成绩管理系统-----------C语言课程设计报告.doc
《学生成绩管理系统-----------C语言课程设计报告.doc》由会员分享,可在线阅读,更多相关《学生成绩管理系统-----------C语言课程设计报告.doc(39页珍藏版)》请在沃文网上搜索。
1、学生成绩管理系统课程设计报告专 业: 信息科学与工程学院 班 级: 姓 名: 指导教师:学 号:课程设计报告一、 课程设计题目学生成绩管理系统1、需要处理的基础数据 学生基本信息:如班级、学号、姓名、性别、年龄等。 学生选修课程的基本信息:课程编号、课程名称、学分、考试成绩、平时成绩、综合成绩(考试成绩*0.7+平时成绩*0.3)等。主菜单2、系统的基本功能 数据的录入:如录入学生的基本信息,以及该学生选修课程的基本信息; 数据的修改:如修改指定学号、或者指定姓名的学生信息,或者修改其选修课程信息; 数据的插入:插入某个学生信息; 数据的查询:如按学号查询、按姓名查询等; 数据的删除:如删除指
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;s
3、truct stu1 /*定义学生选修课信息结构体*/ char lessonnum11; char lessonname256; float score; float testgrade; float commongrade; 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 *cre
4、ate1(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/n
5、)n); 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 *
6、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-commongrade); p1-grade=p1-testgrade*0.7+p1-commongra
7、de*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语句来控制完成。数据的录入:运用链表进行数据的存储,由于要录入的数据有两种即学生的基本信息和学生的选修课程信息,本系统采用两个链表分别存储数据,采用数组将两个链表联
8、系起来,运用循环语句和判断语句来进行数据的录入。作者感到本功能设计中的难点在于将两个链表联系起来,解决方案是采用一个指针数组来将第二个链表中每个节点地址存储起来,进而将两个链表联系起来。信息的修改:本系统采用的是按学号查找信息,系统采用一个由判断语句和循环语句构成的查询函数struct stu *findnum(void)来提供信息存储地址;再按照地址来进行修改,其中采用switch语句和循环语句来控制使系统能够提供选择修改的功能。在这一功能的设计中,作者感到课程信息的修改中的添加课程信息功能是一个难点,解决方案是按插入方案来进行设计。插入信息:本系统采用的是按学号顺序来进行插入的,在这一功能
9、的设计中,首先在开辟一个结构体空间将插入学生的信息存储于其中,在采用判断语句和循环语句来查找该条信息应该插入位置的地址,将上一结点的下行指针指向本结点,再将该节点的下行指针指向下一个结点从而达到插入信息的目的。在这一功能的设计中作者感到插入的具体算法是个难点,本系统采用的教材书本上的方法。查询信息:本功能实现是调用struct stu *findnum(void)函数查找该条信息的地址,然后再采用for循环进行信息的输出,本功能的实现比较简单,难点在于对函数的调用的灵活运用。删除信息:系统采用按学号删除的方案,在这一功能的设计中我没有采用直接调用struct stu *findnum(void
10、)函数,而是又重写查找地址程序,这是出于考虑系统功能的更好实现而采用的举措。具体删除算法采用该节点上一个结点的下行指针直接指向该结点下一个结点从而达到删除该结点的目的。在此功能的设计中,本作者感到难点不在于算法而在于思维设计的是否缜密。计算平均成绩:本功能的实现需要首先计算各个学生的平均成绩,再按照平均成绩进行排序。这两个过程的设计排序是个难点,因为本系统存储结构为链表,在排序方面较数组有很大区别,在作者看来比较困难,解决方案是运用一个指针型数组将每个结点的地址存在其中,再按照该指针指向的平均成绩来排序数组中的地址,再按照数组中的地址顺序来输出信息,间接达到排序的目的。不及格学生清单:判断语句
11、和循环语句的结合运用以达到列出清单的目的,本功能的实现不难,难在于准确控制。三、 系统流程主函数界面输入学生信息修改学生信息查询学生信息删除学生信息插入学生信息计算平均分列出不及格学生清单保存到文件 四、 程序代码 #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 n
12、ame128; 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 commongrade; float grade; struct stu1 *next;int m;struct stu1 *amax_num ;/*定义一个指针数组来记住课程链表地址*/ /*- 数据的
13、录入程序 -*/ 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)
14、; printf(n年龄:); scanf(%d,&p1-age); if(n=1)head=p1; else p2-next=p1; p2=p1; printf(n是否输入选修课信息(y/n)n); 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);
15、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,&
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 语言 课程设计 报告