文档库 最新最全的文档下载
当前位置:文档库 › 毕业论文设计--学生成绩管理系统千行代码c语言课程设计正文

毕业论文设计--学生成绩管理系统千行代码c语言课程设计正文

内蒙古科技大学

本科生课程设计说明书

题目:C语言课程设计

——学生成绩管理系统学生姓名:边峰

学号:1467159114

专业:软件工程

班级:1班

指导教师:周李涌

日期:2015年 1月 1日

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

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

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总体设计

2.2数据类型设计(或数据结构设计)

typedef struct student

{

long xuehao;

char name[12];

int chengji[N];

int zongfen;

float pingjun;

6

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

7

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

运行界面设计

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

8

第二章 详细设计

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("No enough memory!\n"); exit(0); }

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

free(p);

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

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("%s",p->name);

for(j=0; j

{

w:

printf("请输入%s的%s成绩:",p->name,kemu[j]);

scanf("%d",&p->chengji[j]);

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("pause");

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

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

10

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",kemu[0],kemu[1],kemu[2],kemu[3],kemu[4]);

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

printf("%-13ld%-8s%-8d%-8d%-8d%-8d%-6d%-6.0d%-6.1f %-3d\n",p->xuehao, 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++;

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

}

}

3.3查找模块设计

1.流程图

2.模块代码

/* 函数的功能:菜单功能3 查询学生资料*/

void FIND (NODE *head,char kemu [N][20] )

{

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("\n");

if(c==1)

{

printf("请输入学号:");

scanf("%ld",&xuehao);

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

11

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

{

if(xuehao == p->xuehao)

{

if(k)

{

printf("学号姓名%8s%8s%8s%8s%8s 总分平均分\n",kemu[0],kemu[1],kemu[2],kemu[3],kemu[4]);

}

printf("%-13ld%-8s%-8d%-8d%-8d%-8d%-6d%-6.0d%-6.1f \n",p->xuehao,

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("pause");

}

else if(c==2)

{

printf("请输入姓名:");

scanf("%s",name);

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

{

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

{

if(k)

{

printf("学号姓名%8s%8s%8s%8s%8s 总分平均分\n",kemu[0],kemu[1],kemu[2],kemu[3],kemu[4]);

}

printf("%-13ld%-8s%-8d%-8d%-8d%-8d%-6d%-6.0d%-6.1f \n",p->xuehao,

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("pause");

}

else if(c==3)

{

printf("请输入要查找多少分以上的学生:");

scanf("%d",&zongfen);

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

{

if(zongfen <=p->zongfen)

{

if(k)

{

printf("学号姓名%8s%8s%8s%8s%8s 总分平均分\n",kemu[0],kemu[1],kemu[2],kemu[3],kemu[4]);

}

printf("%-13ld%-8s%-8d%-8d%-8d%-8d%-6d%-6.0d%-6.1f \n",p->xuehao,

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("pause");

}

else

{

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

13

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

system("pause");

caidan();

printf("\n");

FIND (head,kemu);

}

}

3.4排序模块设计

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

相关文档
相关文档 最新文档