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

更新时间:2024-04-27 10:44:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

内蒙古科技大学 本科生课程设计说明书

题 目:C语言课程设计 —— 学生成绩管理系统 学生姓名: 学 号:

专 业:软件工程 班 级:1班 指导教师:

日 期:2015年 1月 1日

内蒙古科技大学课程设计说明书

内蒙古科技大学课程设计任务书

课程名称 设计题目 指导教师 C语言课程设计 学生成绩管理系统 时间 2015.1.1-2015.1.7 一、教学要求 1. 巩固和加深学生对C语言课程的基本知识的理解和掌握 2. 掌握C语言编程和程序调试的基本技能 3. 利用C语言进行基本的软件设计 4. 掌握书写程序设计说明文档的能力 5. 提高运用C语言解决实际问题的能力 二、设计资料及参数 每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。 某班学生成绩管理,包括以下功能: ? 从键盘输入包括学号、姓名、各门课程成绩(不少于5门),并将其保存在磁盘文件里 ? 打开文件后,计算每个人的总分和平均分,排序并保存 ? 具有单项查询或多项查询的功能(即按照给定的关键字,如姓名找出满足条件的纪录) ? 具有插入、删除和修改功能 ? 具有输出文件数据信息的功能 三、设计要求及成果 1. 分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目) 2. 写出详细设计说明(至少包括功能实现分析和模块流程图) 3. 编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要见名知意,要有必要的注释,每人至少500行代码,不包括注释和花括号) 4. 设计完成的软件要便于操作和使用 5. 设计完成后提交课程设计报告(请严格按照模板进行排版) 四、进度安排 第一天 选择课程设计题目,分析课题的要求 第二天 编程 第三天 编程及调试 第四天 写课程设计报告 第五天 提交课程设计报告(打印稿及电子稿) 五、评分标准 1. 根据平时上机考勤、表现和进度,教师将每天点名和检查 2. 根据课程设计完成情况,必须有可运行的软件。 3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。 六、建议参考资料 1.《C语言程序设计》,谭浩强,清华大学出版社 2.《C语言程序设计课程设计》,刘振安,机械工业出版社

I

内蒙古科技大学课程设计说明书

目 录

内蒙古科技大学课程设计任务书 ···························································· I 目 录 ·························································································· II 第一章 需求分析 ·············································································· 3

1.1 引言 ·················································································· 3 1.2 任务概述 ············································································ 3 1.3 数据描述 ············································································ 3 1.4 功能需求 ············································································ 4 1.5 性能需求 ············································································ 4 1.6 运行需求 ············································································ 4 1.7 任务计划 ············································································ 5 第二章 概要设计 ············································································ 6

2.1 总体设计 ············································································ 6 2.2 数据类型设计(或数据结构设计) ··········································· 6 2.3 接口设计 ············································································ 7 2.4 运行界面设计 ······································································ 7 第三章 详细设计 ············································································ 8

3.1 输入模块设计 ······································································ 8 3.2 输出模块设计 ····································································· 10 3.3 查找模块设计 ····································································· 11 3.4 排序模块设计 ····································································· 14 3.5 保存及读取模块设计 ···························································· 16 第四章 测试分析 ··········································································· 17

4.1 测试程序执行情况 ······························································· 17 4.2 出现的问题和解决的方法 ······················································ 20 第五章 课程设计总结 ····································································· 21 附录:程序代码 ················································································ 21 参考文献 ························································································· 46

II

内蒙古科技大学课程设计说明书

第一章 需求分析

1.1 引言

此报告完整呈现了我开发“学生成绩管理系统”的整个软件过程,包括需求分析阶段,软件设计与实现阶段和测试阶段。在需求分析阶段,明确所要开发的软件应具有的功能、性能与界面,使系统使用人员及系统开发人员能清楚地了解用户的需求,并在此基础上进一步提出概要设计说明书和完成后续设计与开发工作。在软件设计与实现阶段,进一步细化软件设计阶段得出的软件总体概貌,把它加工成在程序细节上非常接近于源程序的软件表示,然后着手于实践。最后在测试阶段检验了我们的软件的实用性,发现了许多不足。这个报告即是对最后软件的总体描述

1.2 任务概述

学生成绩管理系统: 包括以下功能:

? 从键盘输入包括学号、姓名、各门课程成绩(不少于5门),并将其保存在磁盘文件里

? 打开文件后,计算每个人的总分和平均分,排序并保存 ? 具有单项查询或多项查询的功能(即按照给定的关键字,如姓名找出满足条件的纪录) ? 具有插入、删除和修改功能 ? 具有输出文件数据信息的功能

1.3 数据描述

数据是关于学生的资料:包括 学号、姓名、5门功课的成绩、总分、平均分。

3

内蒙古科技大学课程设计说明书

1.4 功能需求

为实现学生成绩管理系统,该程序有以下功能:

1. 输入学生成绩。以插入节点的形式将输入的学生资料按总分降序插入

链表中。

2. 删除学生成绩。用学号进行查找,查找到后直接删除。

3. 查询学生成绩。三种查找方式,1.姓名 2.学号 3.分数 。1.2.为精确查

找,3为范围查找,输入成绩后,查找出所有高于该成绩的学生并输出。

4. 修改学生成绩。按学号查找学生,查找后可以修改学生的所有信息,

包括学号。修改成绩后自动对总分、平均分更新。

5. 排序学生成绩。排序学生成绩有三种排序方案:1.学号升序。2.总分升

序。3.总分降序

6. 保存学生成绩。将学生成绩保存到student 文件内,以便下次运行程

序时读入数据。

7. 科目设置。对五门科目的名称进行设置。

8. 程序密码设置。程序首次运行时,设置密码。密码保存在mima.txt文

件内。以后每次运行程序都需要输入密码。

9. 程序密码修改。在进入程序主界面后,可以对程序密码进行修改。修

改密码会覆盖原有的mima.txt,将新的密码保存在该文件内。 10. 程序字体颜色。为了程序的美观性,在主菜单内设置了颜色功能。可

以修改程序的颜色。有9种颜色可供选择。

1.5 性能需求

本程序采用动态内存申请的方式,储存学生成绩资料,尽可能的节省了所占内存空间,并且在程序结束时释放所有内存。

1.6 运行需求

在输入学号是学号数值大小不大于长整型的数值范围。 姓名不超过5个中文字符、11个英文字符。

学生成绩不超过宏定义的maxscore 100 不小于 minscore 0.

4

内蒙古科技大学课程设计说明书

本程序在运行时,要求有student文件储存学生资料,mima.txt文件储存程序密码,kemu.txt文件储存科目名称。在文件不存在时,程序会自行创建这些文件以供使用。

1.7 任务计划

设计一个学生成绩管理系统,来管理学生成绩。

包括以下功能:

? 从键盘输入包括学号、姓名、各门课程成绩(不少于5门),并将其保存在磁盘文件里

? 打开文件后,计算每个人的总分和平均分,排序并保存 ? 具有单项查询或多项查询的功能(即按照给定的关键字,如姓名找出满足条件的纪录) ? 具有插入、删除和修改功能 ? 具有输出文件数据信息的功能

5

内蒙古科技大学课程设计说明书

第二章 概要设计

2.1 总体设计

0.结束程序 1.学生 资 料输 入 闪烁欢迎语 密码输入 正确 从文件倒入数据 错三次 结束程序 主菜单 2.学生资料删除 3.查询学生资料 4.修改学生资料 5.显示学生资料 6. 统计学生资料 7.排序学生资料 8.程序密码修改 9.科目设置 10.学生资料保存 11.字体颜色设置 2.2 数据类型设计(或数据结构设计)

typedef struct student {

long xuehao; char name[12]; int chengji[N]; int zongfen; float pingjun;

6

内蒙古科技大学课程设计说明书

struct student*next; } NODE;

2.3 接口设计

void huanyingyu(); //LED灯闪烁欢迎语 void mytime();

//输出问候语句+时间

void mima(char mi[],char mi1[]); //密码函数 void caidan(); //输出主菜单

NODE* daoru (NODE *l,char kemu [][20]); //已存在信息导入 void jieshu(NODE* l); //模块0 结束程序

NODE* InsertNode(NODE *head,char kemu [][20],int count);//模块1 插入学生资料 (总分排序)

NODE* DeleteNode(NODE* head); //模块2 删除学生资料 void FIND (NODE *head,char kemu [N][20] ); //模块3 查询学生资料 void xiugai(NODE *head,char kemu [N][20] ); //模块4 修改学生资料 void DisplyNode(NODE *head,char kemu [][20]); //模块5 显示学生资料 void Tongji(NODE* l,char kemu[][20]); //模块6 统计学生资料 NODE* paixv(NODE *head); //模块7 排列学生资料 void mimaxiugai(char* mi1); //模块8 密码修改 void kemushezhi(char kemu[][20],int k); //模块9 科目设置 void Save(NODE* l); //模块10 学生资料保存 void yanse(); //模块11 颜色设置 2.4

运行界面设计

7

内蒙古科技大学课程设计说明书

第二章 详细设计

3.1 输入模块设计

1. 流程图

2.模块代码:

/* 函数功能:菜单功能1 输入学生信息 以总分降序插入链表*/ NODE *InsertNode(NODE *head,char kemu [][20],int count) {

int j,i;

int sum,xuehao;

NODE *pr = head->next, *p = head, *temp = NULL,*q = head->next; p = (NODE *)malloc(sizeof(NODE));/* 让p指向待插入节点 */ if (p == NULL) /* 若为新建节点申请内存失败,则退出程序 */ {

printf(\ exit(0); }

p->next = NULL; /* 为待插入节点的指针域赋值为空指针 */ printf(\请输入第%d位学生资料:\ printf(\请输入学号:(输入0返回)\ scanf(\ xuehao=p->xuehao; if(p->xuehao==0) {

free(p);

8

申请内存,建立节点 输入学号 学号是否雷同 若学号为0 是 否 继续输入其他信息 求总分、平均分 将该节点插入链表 返回主菜单 内蒙古科技大学课程设计说明书

return head; } else {

while (xuehao != q->xuehao && q->next != NULL)/* 未找到且未到表尾 */ {

q = q->next; }

if (xuehao == q->xuehao) {

printf(\您输入的学好对应学生信息已存在,请检查是否错误后重新输入!\\n\ free(p); return head; } }

printf(\请输入姓名:\ scanf(\ for(j=0; j

w:

printf(\请输入%s的%s成绩:\ scanf(\

if(p->chengji[j]>maxscore||p->chengji[j]

printf(\输入成绩超出有效范围,请重新输入!\\n\ goto w; } }

sum = 0;

for(i=0; i

sum+=(*p).chengji[i]; }

p->zongfen = sum;

p->pingjun= (float)sum/N;

system(\ if (head == NULL) /* 若原链表为空表 */ {

head = p; /* 待插入节点作为头节点 */ } else {

/* 若未找到待插入节点的位置且未到表尾,则继续找 */ while (pr->zongfen > p->zongfen && pr->next != NULL) {

temp = pr; /* 在temp中保存当前节点的指针 */ pr = pr->next;/* pr指向当前节点的下一节点 */ }//printf(\程序运行到此\ if (pr->zongfen <= p->zongfen) {

if (pr == head->next) /* 若在头节点前插入新节点 */ {

p->next = head->next;/* 将新节点的指针域指向原链表的头节点 */ head->next= p; /* 让head指向新节点 */ }

else /* 若在链表中间插入新节点 */ {

pr = temp;

9

内蒙古科技大学课程设计说明书

p->next = pr->next;/* 将新节点的指针域指向下一节点 */ pr->next = p; /* 让前一节点的指针域指向新节点 */ } }

else /* 若在表尾插入新节点 */ {

pr->next = p; /* 让末节点的指针域指向新节点 */ } }

printf(\学生资料添加成功!\\n\ ziliao = 1; return head; /* 返回插入新节点后的链表头指针head的值 */ }

3.2 输出模块设计

1. 流程图

2.模块代码

传入链表头指针 是 是否为空链表 否 是 是否达到表尾 否 输出 返回主菜单 /* 函数的功能:菜单更能5 显示学生资料 */ void DisplyNode(NODE *head,char kemu [N][20] ) {

NODE *p = head->next; int j = 1;

printf(\学号 姓名%8s%8s%8s%8s%8s 总分 平均分 编号\\n\

while (p != NULL) /* 若不是表尾,则循环打印 */ {

printf(\ p->name, p->chengji[0], p->chengji[1], p->chengji[2], p->chengji[3], p->chengji[4], p->zongfen,

p->pingjun,j);/* 打印第j个节点的数据 */ p = p->next; /* 让p指向下一个节点 */ j++;

10

内蒙古科技大学课程设计说明书

} }

3.3 查找模块设计

1. 流程图 1 学号是否相等 是否到表尾 是

2.模块代码

/* {

NODE *p = head->next; int

j = 1,k = 1,c=0;

long xuehao; char name[20]; char c1[1]; int zongfen;

printf(\请输出查找方式:\\n1.学号查找\\n2.姓名查找\\n3.总分查找\\n======>\ c1[0] = getche(); c = atoi(c1); printf(\ if(c==1) {

printf(\请输入学号:\ scanf(\

while (p != NULL) /* 若不是表尾,则循环打印 */

函数的功能:菜单功能3 查询学生资料 */ void FIND (NODE *head,char kemu [N][20] )

1.学号查找 2.姓名查找 3.分数查找 2 姓名是否相同是否到表尾 3 否 进入下一个节点 否 进入下一个节点 否 分数是否大于查询分数 是 是 输出 11

内蒙古科技大学课程设计说明书

{

if(xuehao == p->xuehao) { if(k) {

printf(\学号 姓名%8s%8s%8s%8s%8s 总分 平均分 \\n\

}

printf(\ p->name, p->chengji[0], p->chengji[1], p->chengji[2], p->chengji[3], p->chengji[4], p->zongfen,

p->pingjun);/* 打印第j个节点的数据 */ k=0; }

p = p->next; /* 让p指向下一个节点 */ } if(k==1)

printf(\抱歉,您查找的信息不存在!\\n\ system(\ }

else if(c==2) {

printf(\请输入姓名:\ scanf(\

while (p != NULL) /* 若不是表尾,则循环打印 */ {

if(strcmp(name,p->name) == 0) { if(k) {

printf(\学号 姓名%8s%8s%8s%8s%8s 总分 \\n\

}

printf(\ p->name, p->chengji[0], p->chengji[1], p->chengji[2], p->chengji[3],

12

平均分 内蒙古科技大学课程设计说明书

p->chengji[4], p->zongfen,

p->pingjun);/* 打印第j个节点的数据 */ k=0; }

p = p->next; /* 让p指向下一个节点 */ } if(k==1)

printf(\抱歉,您查找的信息不存在!\\n\ system(\ }

else if(c==3) {

printf(\请输入要查找多少分以上的学生:\ scanf(\

while (p != NULL) /* 若不是表尾,则循环打印 */ {

if(zongfen <=p->zongfen) { if(k) {

printf(\学号 姓名%8s%8s%8s%8s%8s 总分\\n\

}

printf(\ p->name, p->chengji[0], p->chengji[1], p->chengji[2], p->chengji[3], p->chengji[4], p->zongfen,

p->pingjun);/* 打印第j个节点的数据 */ k=0; }

p = p->next; /* 让p指向下一个节点 */ } if(k==1)

printf(\抱歉,您查找的信息不存在!\\n\ system(\ } else {

printf(\输入有误,请重新输入!\\n\

13

平均分 内蒙古科技大学课程设计说明书

system(\ caidan(); printf(\ FIND (head,kemu); } }

3.4 排序模块设计

1. 流程图 1.升序排列 2.降序排列 1.按学号降序排列 2.按总分降序排列 1.按学号升序排序 2.按总分升序排序 返回主函数 调用显示资料函数

2.模块代码

/* 函数的功能:菜单功能7.1 学号升序排列学生*/ NODE* paixv(NODE* head) {

NODE* r = head; NODE* SL = NULL; NODE* t,*cp,*ap; char xv[1]; int xv1;

printf(\请选择排序方式:\\n1.学号升序排列\\t\\t2.总分升序排列\\n3.总分降序排列\\n\

xv[0] = getche(); xv1 = atoi(xv);

while (r != NULL) {

14

本文来源:https://www.bwwdw.com/article/w8yg.html

Top