ImageVerifierCode 换一换
格式:DOCX , 页数:48 ,大小:212.21KB ,
资源ID:10283496      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-10283496.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(班级成绩管理系统.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

班级成绩管理系统.docx

1、班级成绩管理系统课 程 设 计 报 告课程名称 C语言程序设计 课题名称 班级成绩管理系统 专 业 机械设计及其自动化 班 级 机设0802班 学 号 200802010237 姓 名 杨飞 指导教师 黄哲,郭芳 ,陈多 2009年7月5日 湖南工程学院课 程 设 计 任 务 书课程名称 C程序设计 课 题 班级成绩管理系统 专业班级 机械设计及其自动化0802班 学生姓名 杨飞 学 号 200802010237 指导老师 黄哲, 郭芳 ,陈多 审 批 任务书下达日期 2009年 6月 28 日任务完成日期 2009年 7月 5日C语言课程设计任务书一、设计内容与设计要求1、课程设计内容(1)

2、、课程问题描述:对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。(2)、程序功能要求:1、本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称。2、本系统显示这样的菜单:请选择系统功能项:a、 成绩录入b、 成绩显示c、 成绩保存d、 成绩排序e、 成绩修改(要求先输入密码)f、 成绩统计(1) 显示每门课程成绩最高的学生的基本信息(2) 显示每门课程的平均成绩g、 退出系统3、执行一个具体的功能之后,程序将重新显示菜单。4、将学生成绩保存到文件中。(3)、程序算法提示:1、数据结构:结构体类型数组。2、数据库结

3、构:下表构成该系统的基本数据库。 姓名学号课程名称1课程名称2charCharfloatfloat(4)、测试数据:学生人数N=10课程门数M=4课程名:数学、语文、英语、政治(5)实验分组及安排所选题目根据学生学号确定,学号除以4的余数,即(学号%4)。如你的学号为17,则所选题目号为:17%41(题目1)。(6)成绩评定程序设计方案是否合理;程序设计是否正确;调试结果;设计说明书的质量高低;答辩时回答问题情况;课程设计周表现情况;总评成绩记入“课程设计成绩评分表”。目 录概要设计 11) 程序的模块组成: 12) 各个函数的主要功能: 2详细设计 4主要功能的实现 4函数明细: 4主函数

4、4菜单选择函数 4初始化函数 4输入记录函数 5显示记录函数 5保存数据到文件函数 6查找记录函数 6删除记录函数 7修改函数 8从文件读数据函数 9按部分排序函数 10主要源程序代码 11调试分析 25程序调试: 25程序部分截图 25思想总结 27计算机通信学院课程设计评分表 31概要设计 学生成绩管理系统有13种功能。把这13个功能做成13个子函数。在主函当数中设计一个菜单对这13个子数进行管理。来实现对整个系统的操作。根据课题的要求。每一个学生的包括姓名(char)、学号(char)、M门课程的成绩(float).再加上系统功能上的要求每一学生的信息还要总分和名次等。所以自然的想到要用

5、结构体来定义每一个学生的信息结构。然后用链表把它们组成一个有序的整体。用对链表的操作来实现对所有学生信息的统一管理(成绩显示、成绩排序、成绩修改等)。最后为了以后按照处理后的顺序保存到文件中。各函数的功能: 1) 程序的模块组成: 主 函 数: int main() 新建函数:STUDENT *init() 输入函数 :STUDENT *create() 显示函数: void print(STUDENT *h) 删除函数: STUDENT *delete(STUDENT *h) 按名字寻找函数: void search(STUDENT *h)保存函数: void save(STUDENT *h

6、)按总分排序函数: STUDENT *sort(STUDENT *h) 计算总分和均分函数: void computer(STUDENT *h)修改函数: STUDENT *Modify(STUDENT *head,STUDENT *new) 按学号排序函数: STUDENT *index(STUDENT *h) 菜单函数:int menu_select() 2) 各个函数的主要功能: 输入函数: 随时输入数据。 菜单函数:显示系统主菜单。 显示函数: 显示所有学生的信息。 寻找函数: 方便学生查找自己的成绩。 删除函数: 删除某学生的信息。 排序函数: 按总成绩排序。 按学号排序函数: 按学

7、号排序。插入函数: 可以插入新的信息。 保存函数: 保存好学生成绩,以免丢失。统计函数: 显示每门课程成绩最高的学生的基本信息。 显示每门课程的平均成绩。 显示超过某门课程平均成绩的学生人数总体框架: 详细设计主要功能的实现函数明细:整个系统除了主函数外,另外还有14个函数,实现八大功能:输入功能、显示功能、查找功能、排序功能、插入功能、保存功能、读取功能。各个函数的详细设计说明分别如下:主函数 利用无限次循环for(;)和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。菜单选择函数这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据

8、每个功能前面的序号进行选择。等执行完每一个函数功能后,再自行返回该函数。初始化函数 这是一个无参函数,里面只有两个语句,它的作用是使链表初始化,使head的值为NULL和一个清屏语句。比如:没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!输入记录函数 这是一个无参函数,用来执行第学生成绩记录的输入,当学生为时停止输入,函数结束后,带回一个指链表头的指针向head。将下一个学生的信息插在表头。N-S流程图如下:head=NULL 无条件循环 指针p指向新开辟的单元 指针p是否为空 是 否输入学号p-num 输出 p-num是否为 内存 是 否 溢出 输入姓名p

9、-name 停止 for(i=0;isum=s; 菜单 p-average=(float)s/3; p-order=0; p-next=head;head=p;显示记录函数 这是一个不返回值的有参函数,形参为“链表头的指针”,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。算法:先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。然后再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。重复执行此步聚直到p指针指向NULL为止。N-S流程图如下:p=head,使指向第一个结点 输出p所指向的结点 p指向一下个结点 当p指的不是

10、表尾保存数据到文件函数 这是一个不返回值的有参函数,形参为“链表头的指针”,可以把学生记录保存在电脑上由自己任意命名的二进制文件。N-S流程图如下:输入要保存记录的文件地址outfile 文件能打开 是 否p=head; 输出一个出错信当p不为空时 息,并返回菜单 fwrite(p,LEN,1,fp); (写入一条记录) p=pnext; (指针后移) fclose(fp); (关闭文件)查找记录函数这是一个不返回值的有参函数,形参为“链表头的指针”,实现按学号对某个学生进行查找,并显示所查找到的记录。算法:采用线性查找法往下一个结点查找。输入所要查找的学生的学号s,设一个指针变量p,先指向第

11、一个结点,当strcmp(p-name,s) & p != NULL时,使p后移一个结点,如果p!=NULL,输出p所指的结点。N-S流程图如下:输入要查找的学生的学号sp=head,使p指向第一结点当记录的学号不是要找的,或指针不为空时 p=p-next p!=NULL如果指针不为空 是 否 显示没有该 输出p所指向的结点 学生删除记录函数 这是一个有返回值的有参函数。形参为“链表头的指针”,在核对密码后。实现对所要删除学生按学号进行查找。找到后显示该学生的信息。按任意键进行删除。算法:主函数链表的头指针,用一个输出语句printf(Input your password:);提示用户输入密

12、码。在输入过程中如果需要用到退格。putchar(8);putchar( ); putchar(8);来达到视觉和功能上的要求。如果密码错误,则两秒后自动返回主菜单。正确后输入要删除的学生学号,进行删除。N-S流程图如下:修改函数这是一个有参函数,一个是“链表头的指针”修改之后,并返回链表的头指针。算法:首先向系统申请一块空间,用于存放输入的信息。程序会根据用户输入的学号。采用线性查找法往下一个结点查找。设一个指针变量p,先指向第一个结点,当strcmp(p-name,s) & p != NULL时,使p后移一个结点,如果p!=NULL,输出p所指的结点。如果有该学生就修改。并出现提示信息*M

13、odify success!*。如果没有该学生则出现“*Find out No.%s student*”提示。并2秒后返回主菜单。N-S流程图如下:q=head 原来的链表是空表是 否2秒后 当记录的学号不是要找的,或指针不为空时返回 主菜单 info指向q位置 q向后移一个结点!strcmp(p-no,info-no) 是 否 printf(Dont forget saven) info-next=p-next; q-next=info;从文件读数据函数这是一个不返回值的有参函数,形参为“链表头的指针”,根据输入的文件地址进行读取。N-S流程图如下:定义两个指针变量p1,p2输入要打开的记录

14、文件地址infile 文件能打开是 否开辟一个新单元 指针p1是否为空 返回菜单 否 是 返回菜单读入记录 fclose(fp); (关闭文件)按部分排序函数 这是一个有参函数,形参为“链表头的指针”,按学生成绩的平均分高低进行排序,还可以显示名次。N-S流程图:temp=head-next,head-next=NULL 当temp!=NULL时 t=temp;temp=temp-next;p1=head;p2=head; 当t-averageaverage&p1!=NULL时p2=p1;p1=p1-next; p1=p2 是 否 t-next=p1; t-next=p1; head=t; p

15、2-next=t; p1=head; 当p1!=NULL时i+;p1order=i;p1=p1next; 输出“排序成功”主要源程序代码/* 学生成绩管理源程序*/*xuesheng.c*/*头文件(.h)*/#include stdio.h /*I/O函数*/#include stdlib.h /*其它说明*/#include string.h /*字符串函数*/#include conio.h /*屏幕操作函数*/#include mem.h /*内存操作函数*/#include ctype.h /*字符操作函数*/#include alloc.h /*动态地址分配函数*/#define

16、N 3 /*定义常数*/typedef struct z1 /*定义数据结构*/ char no11; char name15; int scoreN; float sum; float average; int order; struct z1 *next; STUDENT;/*以下是函数原型*/STUDENT *init(); /*初始化函数*/STUDENT *create(); /*创建链表*/STUDENT *delete(STUDENT *h); /*删除记录*/void print(STUDENT *h); /* 显示所有记录*/void search(STUDENT *h);

17、/*查找*/void save(STUDENT *h); /*保存*/STUDENT *load(); /*读入记录*/void computer(STUDENT *h); /*计算总分和均分*/STUDENT *insert(STUDENT *h); /*插入记录*/void append(); /*追加记录*/void copy(); /*复制文件*/STUDENT *sort(STUDENT *h); /*排序*/STUDENT *index(STUDENT *h); /*索引*/void total(STUDENT *h); /*分类合计*/int menu_select(); /*菜

18、单函数*/*主函数开始*/main() int i; STUDENT *head; /*链表定义头指针*/ head=init(); /*初始化链表*/ clrscr(); /*清屏*/ for(;) /*无限循环*/ switch(menu_select() /*调用主菜单函数,返回值整数作开关语句的条件*/ /*值不同,执行的函数不同,break 不能省略*/ case 0:head=init();break; /*执行初始化*/ case 1:head=create();break; /*创建链表*/ case 2:head=delete(head);break; /*删除记录*/ ca

19、se 3:print(head);break; /*显示全部记录*/ case 4:search(head);break; /*查找记录*/ case 5:save(head);break; /*保存文件*/ case 6:head=load(); break; /*读文件*/ case 7:computer(head);break; /*计算总分和均分*/ case 8:head=insert(head); break; /*插入记录*/ case 9:copy();break; /*复制文件*/ case 10:head=sort(head);break; /*排序*/ case 11:a

20、ppend();break; /*追加记录*/ case 12:head=index(head);break; /*索引*/ case 13:total(head);break; /*分类合计*/ case 14:exit(0); /*如菜单返回值为14程序结束*/ /*菜单函数,返回值为整数*/menu_select() char *menu=*MENU*, /*定义菜单字符串数组*/ 0. init list, /*初始化*/ 1. Enter list, /*输入记录*/ 2. Delete a record from list, /*从表中删除记录*/ 3. print list ,

21、/*显示单链表中所有记录*/ 4. Search record on name, /*按照姓名查找记录*/ 5. Save the file, /*将单链表中记录保存到文件中*/ 6. Load the file, /*从文件中读入记录*/ 7. compute the score, /*计算所有学生的总分和均分*/ 8. insert record to list , /*插入记录到表中*/ 9. copy the file to new file, /*复制文件*/ 10. sort to make new file, /*排序*/ 11. append record to file, /

22、*追加记录到文件中*/ 12. index on nomber, /*索引*/ 13. total on nomber, /*分类合计*/ 14. Quit; /*退出*/ char s3; /*以字符形式保存选择号*/ int c,i; /*定义整形变量*/ gotoxy(1,25); /*移动光标*/ printf(press any key enter menu.n); /*压任一键进入主菜单*/ getch(); /*输入任一键*/ clrscr(); /*清屏幕*/ gotoxy(1,1); /*移动光标*/ textcolor(YELLOW); /*设置文本显示颜色为黄色*/ te

23、xtbackground(BLUE); /*设置背景颜色为蓝色*/ gotoxy(10,2); /*移动光标*/ putch(0xc9); /*输出左上角边框*/ for(i=1;i44;i+) putch(0xcd); /*输出上边框水平线*/ putch(0xbb); /*输出右上角边框 */ for(i=3;i20;i+) gotoxy(10,i);putch(0xba); /*输出左垂直线*/ gotoxy(54,i);putch(0xba); /*输出右垂直线*/ gotoxy(10,20);putch(0xc8); /*输出左上角边框*/ for(i=1;i44;i+) putch

24、(0xcd); /*输出下边框水平线*/ putch(0xbc); /*输出右下角边框*/ window(11,3,53,19); /* 制作显示菜单的窗口,大小根据菜单条数设计*/ clrscr(); /*清屏*/ for(i=0;i16;i+) /*输出主菜单数组*/ gotoxy(10,i+1); cprintf(%s,menui); textbackground(BLACK); /*设置背景颜色为黑色*/ window(1,1,80,25); /*恢复原窗口大小*/ gotoxy(10,21); /*移动光标*/ do printf(n Enter you choice(014):);

25、 /*在菜单窗口外显示提示信息*/ scanf(%s,s); /*输入选择项*/ c=atoi(s); /*将输入的字符串转化为整形数*/ while(c14); /*选择项不在014之间重输*/ return c; /*返回选择项,主程序根据该数调用相应的函数*/STUDENT *init() return NULL;/*创建链表*/STUDENT *create() int i; int s; STUDENT *h=NULL,*info; /* STUDENT指向结构体的指针*/ for(;) info=(STUDENT *)malloc(sizeof(STUDENT); /*申请空间*/

26、 if(!info) /*如果指针info为空*/ printf(nout of memory); /*输出内存溢出*/ return NULL; /*返回空指针*/ inputs(enter no:,info-no,11); /*输入学号并校验*/ if(info-no0=) break; /*如果学号首字符为则结束输入*/ inputs(enter name:,info-name,15); /*输入姓名,并进行校验*/ printf(please input %d score n,N); /*提示开始输入成绩*/ s=0; /*计算每个学生的总分,初值为0*/ for(i=0;iscore

27、i); /*输入成绩*/ if(info-scorei100|info-scoreiscorei100|info-scoreiscorei; /*累加各门课程成绩*/ info-sum=s; /*将总分保存*/ info-average=(float)s/N; /*求出平均值*/ info-order=0; /*未排序前此值为0*/ info-next=h; /*将头结点做为新输入结点的后继结点*/ h=info; /*新输入结点为新的头结点*/ return(h); /*返回头指针*/*输入字符串,并进行长度验证*/inputs(char *prompt, char *s, int count) char p255; do printf(prompt); /*显示提示信息*/ scanf(%s,p); /*输入字符串*/ if(strlen(p)count)printf(n too long! n); /*进行长度校验,超过count值重输入*/ while(strlen(p)count); strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/*输出链表中结点信息*/void print(STUDENT *h) int i=0; /* 统计记录条数*/ STUDENT *p; /*移动指针*/ clrscr(); /*清屏

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2