班级成绩管理系统.docx

上传人:b****3 文档编号:10283496 上传时间:2023-05-24 格式:DOCX 页数:48 大小:212.21KB
下载 相关 举报
班级成绩管理系统.docx_第1页
第1页 / 共48页
班级成绩管理系统.docx_第2页
第2页 / 共48页
班级成绩管理系统.docx_第3页
第3页 / 共48页
班级成绩管理系统.docx_第4页
第4页 / 共48页
班级成绩管理系统.docx_第5页
第5页 / 共48页
班级成绩管理系统.docx_第6页
第6页 / 共48页
班级成绩管理系统.docx_第7页
第7页 / 共48页
班级成绩管理系统.docx_第8页
第8页 / 共48页
班级成绩管理系统.docx_第9页
第9页 / 共48页
班级成绩管理系统.docx_第10页
第10页 / 共48页
班级成绩管理系统.docx_第11页
第11页 / 共48页
班级成绩管理系统.docx_第12页
第12页 / 共48页
班级成绩管理系统.docx_第13页
第13页 / 共48页
班级成绩管理系统.docx_第14页
第14页 / 共48页
班级成绩管理系统.docx_第15页
第15页 / 共48页
班级成绩管理系统.docx_第16页
第16页 / 共48页
班级成绩管理系统.docx_第17页
第17页 / 共48页
班级成绩管理系统.docx_第18页
第18页 / 共48页
班级成绩管理系统.docx_第19页
第19页 / 共48页
班级成绩管理系统.docx_第20页
第20页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

班级成绩管理系统.docx

《班级成绩管理系统.docx》由会员分享,可在线阅读,更多相关《班级成绩管理系统.docx(48页珍藏版)》请在冰点文库上搜索。

班级成绩管理系统.docx

班级成绩管理系统

课程设计报告

课程名称C语言程序设计

课题名称班级成绩管理系统

专业机械设计及其自动化

班级机设0802班

学号200802010237

姓名杨飞

指导教师黄哲,郭芳,陈多

2009年7月5日

湖南工程学院

课程设计任务书

 

课程名称C程序设计

课题班级成绩管理系统

 

专业班级机械设计及其自动化0802班

学生姓名杨飞

学号200802010237

指导老师黄哲,郭芳,陈多

审批

 

任务书下达日期2009年6月28日

任务完成日期2009年7月5日

C语言课程设计任务书

一、设计内容与设计要求

1、课程设计内容

(1)、课程问题描述:

对一个有N个学生的班级,每个学生有M门课程。

该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。

(2)、程序功能要求:

1、本系统采用一个结构体数组,每个数据的结构应当包括:

学号、姓名、M门课程名称。

2、本系统显示这样的菜单:

请选择系统功能项:

a、成绩录入

b、成绩显示

c、成绩保存

d、成绩排序

e、成绩修改(要求先输入密码)

f、成绩统计

(1)显示每门课程成绩最高的学生的基本信息

(2)显示每门课程的平均成绩

g、退出系统

3、执行一个具体的功能之后,程序将重新显示菜单。

4、将学生成绩保存到文件中。

(3)、程序算法提示:

1、数据结构:

结构体类型数组。

2、数据库结构:

下表构成该系统的基本数据库。

姓名

学号

课程名称1

课程名称2

……

char

Char

float

float

(4)、测试数据:

学生人数N=10

课程门数M=4

课程名:

数学、语文、英语、政治

(5).实验分组及安排

所选题目根据学生学号确定,学号除以4的余数,即(学号%4)。

如你的学号为17,则所选题目号为:

17%4~~~1(题目1)。

(6).成绩评定

程序设计方案是否合理;程序设计是否正确;调试结果;设计说明书的质量高低;答辩时回答问题情况;课程设计周表现情况;总评成绩记入“课程设计成绩评分表”。

目录

概要设计1

1)程序的模块组成:

1

2)各个函数的主要功能:

2

详细设计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).再加上系统功能上的要求每一学生的信息还要总分和名次等。

所以自然的想到要用结构体来定义每一个学生的信息结构。

然后用链表把它们组成一个有序的整体。

用对链表的操作来实现对所有学生信息的统一管理(成绩显示、成绩排序、成绩修改等)。

最后为了以后按照处理后的顺序保存到文件中。

 

各函数的功能:

1)程序的模块组成:

主函数:

intmain()

新建函数:

STUDENT*init()

输入函数:

STUDENT*create()

显示函数:

voidprint(STUDENT*h)

删除函数:

STUDENT*delete(STUDENT*h)

按名字寻找函数:

voidsearch(STUDENT*h)

保存函数:

voidsave(STUDENT*h)

按总分排序函数:

STUDENT*sort(STUDENT*h)

计算总分和均分函数:

voidcomputer(STUDENT*h)

修改函数:

STUDENT*Modify(STUDENT*head,STUDENT*new)

按学号排序函数:

STUDENT*index(STUDENT*h)

菜单函数:

intmenu_select()

2)各个函数的主要功能:

输入函数:

随时输入数据。

菜单函数:

显示系统主菜单。

显示函数:

显示所有学生的信息。

寻找函数:

方便学生查找自己的成绩。

删除函数:

删除某学生的信息。

排序函数:

按总成绩排序。

按学号排序函数:

按学号排序。

插入函数:

可以插入新的信息。

保存函数:

保存好学生成绩,以免丢失。

统计函数:

●显示每门课程成绩最高的学生的基本信息。

●显示每门课程的平均成绩。

●显示超过某门课程平均成绩的学生人数

 

总体框架:

 

 

 

详细设计

主要功能的实现

函数明细:

整个系统除了主函数外,另外还有14个函数,实现八大功能:

输入功能、显示功能、查找功能、排序功能、插入功能、保存功能、读取功能。

各个函数的详细设计说明分别如下:

主函数

利用无限次循环for(;;)和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。

菜单选择函数

这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择。

等执行完每一个函数功能后,再自行返回该函数。

初始化函数

这是一个无参函数,里面只有两个语句,它的作用是使链表初始化,使head的值为NULL和一个清屏语句。

比如:

没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!

输入记录函数

这是一个无参函数,用来执行第学生成绩记录的输入,当学生为@时停止输入,函数结束后,带回一个指链表头的指针向head。

将下一个学生的信息插在表头。

N-S流程图如下:

 

head=NULL

无条件循环

指针p指向新开辟的单元

指针p是否为空

是否

输入学号p->num

输出p->num是否为@

内存是否

溢出输入姓名p->name

停止for(i=0;i<3;i++)

输入输入成绩

返回p->sum=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指的不是表尾

保存数据到文件函数

这是一个不返回值的有参函数,形参为“链表头的指针”,可以把学生记录保存在电脑上由自己任意命名的二进制文件。

N-S流程图如下:

 

输入要保存记录的文件地址outfile

文件能打开

是否

p=head;

输出一个出错信

当p不为空时息,并返回菜单

fwrite(p,LEN,1,fp);(写入一条记录)

p=p—>next;(指针后移)

fclose(fp);(关闭文件)

查找记录函数

这是一个不返回值的有参函数,形参为“链表头的指针”,实现按学号对某个学生进行查找,并显示所查找到的记录。

算法:

采用线性查找法往下一个结点查找。

输入所要查找的学生的学号s,设一个指针变量p,先指向第一个结点,当strcmp(p->name,s)&&p!

=NULL时,使p后移一个结点,如果p!

=NULL,输出p所指的结点。

N-S流程图如下:

 

输入要查找的学生的学号s

p=head,使p指向第一结点

当记录的学号不是要找的,或指针不为空时

p=p->next

p!

=NULL如果指针不为空

是否

显示没有该

输出p所指向的结点学生

删除记录函数

这是一个有返回值的有参函数。

形参为“链表头的指针”,在核对密码后。

实现对所要删除学生按学号进行查找。

找到后显示该学生的信息。

按任意键进行删除。

算法:

主函数链表的头指针,用一个输出语句printf("Inputyourpassword:

");

提示用户输入密码。

在输入过程中如果需要用到退格。

putchar(8);putchar('');putchar(8);来达到视觉和功能上的要求。

如果密码错误,则两秒后自动返回主菜单。

正确后输入要删除的学生学号,进行删除。

N-S流程图如下:

修改函数

这是一个有参函数,一个是“链表头的指针”修改之后,并返回链表的头指针。

算法:

首先向系统申请一块空间,用于存放输入的信息。

程序会根据用户输入的学号。

采用线性查找法往下一个结点查找。

设一个指针变量p,先指向第一个结点,当strcmp(p->name,s)&&p!

=NULL时,使p后移一个结点,如果p!

=NULL,输出p所指的结点。

如果有该学生就修改。

并出现提示信息"***Modifysuccess!

***"。

如果没有该学生则出现“***FindoutNo.%sstudent***”提示。

并2秒后返回主菜单。

N-S流程图如下:

 

q=head

原来的链表是空表

是否

2秒后当记录的学号不是要找的,或指针不为空时

返回

主菜单info指向q位置q向后移一个结点

!

strcmp(p->no,info->no)

printf("Don't

forgetsave\n")

info->next=p->next;

q->next=info;

 

 

从文件读数据函数

这是一个不返回值的有参函数,形参为“链表头的指针”,根据输入的文件地址进行读取。

N-S流程图如下:

定义两个指针变量p1,p2

输入要打开的记录文件地址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;p2->next=t;

 

p1=head;

当p1!

=NULL时

i++;p1—>order=i;p1=p1—>next;

输出“排序成功”

主要源程序代码

/*学生成绩管理源程序*/

/***********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"/*动态地址分配函数*/

#defineN3/*定义常数*/

typedefstructz1/*定义数据结构*/

{

charno[11];

charname[15];

intscore[N];

floatsum;

floataverage;

intorder;

structz1*next;

}STUDENT;

/*以下是函数原型*/

STUDENT*init();/*初始化函数*/

STUDENT*create();/*创建链表*/

STUDENT*delete(STUDENT*h);/*删除记录*/

voidprint(STUDENT*h);/*显示所有记录*/

voidsearch(STUDENT*h);/*查找*/

voidsave(STUDENT*h);/*保存*/

STUDENT*load();/*读入记录*/

voidcomputer(STUDENT*h);/*计算总分和均分*/

STUDENT*insert(STUDENT*h);/*插入记录*/

voidappend();/*追加记录*/

voidcopy();/*复制文件*/

STUDENT*sort(STUDENT*h);/*排序*/

STUDENT*index(STUDENT*h);/*索引*/

voidtotal(STUDENT*h);/*分类合计*/

intmenu_select();/*菜单函数*/

/******主函数开始*******/

main()

{

inti;

STUDENT*head;/*链表定义头指针*/

head=init();/*初始化链表*/

clrscr();/*清屏*/

for(;;)/*无限循环*/

{

switch(menu_select())/*调用主菜单函数,返回值整数作开关语句的条件*/

{/*值不同,执行的函数不同,break不能省略*/

case0:

head=init();break;/*执行初始化*/

case1:

head=create();break;/*创建链表*/

case2:

head=delete(head);break;/*删除记录*/

case3:

print(head);break;/*显示全部记录*/

case4:

search(head);break;/*查找记录*/

case5:

save(head);break;/*保存文件*/

case6:

head=load();break;/*读文件*/

case7:

computer(head);break;/*计算总分和均分*/

case8:

head=insert(head);break;/*插入记录*/

case9:

copy();break;/*复制文件*/

case10:

head=sort(head);break;/*排序*/

case11:

append();break;/*追加记录*/

case12:

head=index(head);break;/*索引*/

case13:

total(head);break;/*分类合计*/

case14:

exit(0);/*如菜单返回值为14程序结束*/

}

}

}

/*菜单函数,返回值为整数*/

menu_select()

{

char*menu[]={"***************MENU***************",/*定义菜单字符串数组*/

"0.initlist",/*初始化*/

"1.Enterlist",/*输入记录*/

"2.Deletearecordfromlist",/*从表中删除记录*/

"3.printlist",/*显示单链表中所有记录*/

"4.Searchrecordonname",/*按照姓名查找记录*/

"5.Savethefile",/*将单链表中记录保存到文件中*/

"6.Loadthefile",/*从文件中读入记录*/

"7.computethescore",/*计算所有学生的总分和均分*/

"8.insertrecordtolist",/*插入记录到表中*/

"9.copythefiletonewfile",/*复制文件*/

"10.sorttomakenewfile",/*排序*/

"11.appendrecordtofile",/*追加记录到文件中*/

"12.indexonnomber",/*索引*/

"13.totalonnomber",/*分类合计*/

"14.Quit"};/*退出*/

chars[3];/*以字符形式保存选择号*/

intc,i;/*定义整形变量*/

gotoxy(1,25);/*移动光标*/

printf("pressanykeyentermenu......\n");/*压任一键进入主菜单*/

getch();/*输入任一键*/

clrscr();/*清屏幕*/

gotoxy(1,1);/*移动光标*/

textcolor(YELLOW);/*设置文本显示颜色为黄色*/

textbackground(BLUE);/*设置背景颜色为蓝色*/

gotoxy(10,2);/*移动光标*/

putch(0xc9);/*输出左上角边框┏*/

for(i=1;i<44;i++)

putch(0xcd);/*输出上边框水平线*/

putch(0xbb);/*输出右上角边框┓*/

for(i=3;i<20;i++)

{

gotoxy(10,i);putch(0xba);/*输出左垂直线*/

gotoxy(54,i);putch(0xba);

}/*输出右垂直线*/

gotoxy(10,20);putch(0xc8);/*输出左上角边框┗*/

for(i=1;i<44;i++)

putch(0xcd);/*输出下边框水平线*/

putch(0xbc);/*输出右下角边框┛*/

window(11,3,53,19);/*制作显示菜单的窗口,大小根据菜单条数设计*/

clrscr();/*清屏*/

for(i=0;i<16;i++)/*输出主菜单数组*/

{

gotoxy(10,i+1);

cprintf("%s",menu[i]);

}

textbackground(BLACK);/*设置背景颜色为黑色*/

window(1,1,80,25);/*恢复原窗口大小*/

gotoxy(10,21);/*移动光标*/

do{

printf("\nEnteryouchoice(0~14):

");/*在菜单窗口外显示提示信息*/

scanf("%s",s);/*输入选择项*/

c=atoi(s);/*将输入的字符串转化为整形数*/

}while(c<0||c>14);/*选择项不在0~14之间重输*/

returnc;/*返回选择项,主程序根据该数调用相应的函数*/

}

STUDENT*init()

{

returnNULL;

}

/*创建链表*/

STUDENT*create()

{

inti;ints;

STUDENT*h=NULL,*info;/*STUDENT指向结构体的指针*/

for(;;)

{

info=(STUDENT*)malloc(sizeof(STUDENT));/*申请空间*/

if(!

info)/*如果指针info为空*/

{

printf("\noutofmemory");/*输出内存溢出*/

returnNULL;/*返回空指针*/

}

inputs("enterno:

",info->no,11);/*输入学号并校验*/

if(info->no[0]=='@')break;/*如果学号首字符为@则结束输入*/

inputs("entername:

",info->name,15);/*输入姓名,并进行校验*/

printf("pleaseinput%dscore\n",N);/*提示开始输入成绩*/

s=0;/*计算每个学生的总分,初值为0*/

for(i=0;i

{

do{

printf("score%d:

",i+1);/*提示输入第几门课程*/

scanf("%d",&info->score[i]);/*输入成绩*/

if(info->score[i]>100||info->score[i]<0)/*确保成绩在0~100之间*/

printf("baddata,repeatinput\n");/*出错提示信息*/

}while(info->score[i]>100||info->score[i]<0);

s=s+info->score[i];/*累加各门课程成绩*/

}

info->sum=s;/*将总分保存*/

info->average=(float)s/N;/*求出平均值*/

info->order=0;/*未排序前此值为0*/

info->next=h;/*将头结点做为新输入结点的后继结点*/

h=info;/*新输入结点为新的头结点*/

}

return(h);/*返回头指针*/

}

/*输入字符串,并进行长度验证*/

inputs(char*prompt,char*s,intcount)

{

charp[255];

do{

printf(prompt);/*显示提示信息*/

scanf("%s",p);/*输入字符串*/

if(strlen(p)>count)printf("\ntoolong!

\n");/*进行长度校验,超过count值重输入*/

}while(strlen(p)>count);

strcpy(s,p);/*将输入的字符串拷贝到字符串s中*/

}

/*输出链表中结点信息*/

voidprint(STUDENT*h)

{

inti=0;/*统计记录条数*/

STUDENT*p;/*移动指针*/

clrscr();/*清屏

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

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

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