学生成绩管理系统.docx

上传人:b****6 文档编号:4288516 上传时间:2022-11-28 格式:DOCX 页数:25 大小:86.14KB
下载 相关 举报
学生成绩管理系统.docx_第1页
第1页 / 共25页
学生成绩管理系统.docx_第2页
第2页 / 共25页
学生成绩管理系统.docx_第3页
第3页 / 共25页
学生成绩管理系统.docx_第4页
第4页 / 共25页
学生成绩管理系统.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

学生成绩管理系统.docx

《学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统.docx(25页珍藏版)》请在冰豆网上搜索。

学生成绩管理系统.docx

学生成绩管理系统

目录

5.1题目

5.2课程设计

5.3需求分析

5.4设计要求

5.4.1功能设计要求

5.4.2总体设计

5.4.3函数设计

5.5源程序

5.6总结

5.7参考资料

 

学生成绩管理系统

2.1题目

学生成绩管理系统

2.2课程设计目的

1要求学生达到熟练掌握C语言的基本知识和技能

2掌握利用工具软件开发系统的基本思路和方法

3强化上机动手能力,闯过编码关,把理论与实际应用相结合

2.3需求分析

本课程设计是一个简单的学生成绩管理系统,该系统用以实现学生基本信息的编辑,课程信息的编辑,成绩信息的编辑,学生成绩统计等等。

2.4设计要求

2.4.1功能设计和要求

设计要求实现的功能很多,主要分为几个板快进行分析。

1系统功能

①学生基本信息的编辑:

包括学生信息的录入、修改、删除和查询等功能。

②课程信息的编辑:

包括课程信息的录入、修改、删除和查询等功能。

③成绩信息的编辑:

包括学生成绩的录入、修改、删除和查询等的功能。

④学生成绩统计,包括:

按学号、按课程号求平均分、各分数段的人数与百分比。

按学号求不及格的门数。

按课程号求不及格的人数。

⑤通过菜单选择退出系统,并有退出系统的提示或确认。

2系统要求

①使用菜单操作。

②学生信息用文件保存。

③进入系统的时候,要验证用户身份(用户名和密码)。

3应用程序的总体设计图:

 

(1)程序加密

在开始进入系统的时候,首先要进行密码核对,以便对程序进行保护,核对正确后,才能进入系统。

(2)主页面

从键盘录入学生成绩的基本信息。

1按照一定的顺序依次输入学生的“学号”、“姓名”、“语文”、“数学”、“英语”等基本内容。

2学生姓名要和学生成绩相匹配。

3输入完毕后要保存学生信息。

(3)增加学生成绩界面

输入学生的基本信息。

(4)删除学生成绩界面

删除学生的基本信息。

(5)修改学生成绩界面

按学号选择需要修改的学生信息。

(6)查找学生成绩界面

①查找已经保存了的学生信息。

②按照学号查找。

(7)统计学生成绩界面

①按学号、按课程号求平均分、各分数段的人数与百分比。

②按学号求不及格的门数。

③按课程号求不及格的人数。

2.4.2总体设计

最初的规划只是说明它的可行性,不要求制定函数的具体实现,甚至不需要考虑数原型。

完成规划后,按照各个模块的功能连接描述。

1要求使用多个文件方式实现设计;

2要求在个各文件内实现结构化设计;

3每个文件作为单独的C文件,分别说明每个函数的功能和实现方法。

 

2.4.3函数设计

下面分别描述一些函数,建立它们的原型。

1保存函数

函数原型:

structstudent_type*saveDate(structstudent_type*head)

功能:

保存学生信息

参数:

struct

工作方式:

保存输入的学生信息

要求:

保存在文件里

2查找函数

函数原型:

structstudent_type*find(structstudent_type*head,longnum)

功能:

查找学生信息

参数:

struct

工作方式:

查找输入的学生信息

要求:

只对储存内容进行查找

3增加函数

函数原型:

structstudent_type*add(structstudent_type*head)

功能:

增加学生信息

参数:

struct

工作方式:

输入学生的信息

要求:

按顺序输入

4浏览函数

函数原型:

voidbrowse

功能:

浏览保存的学生信息

参数:

void

工作方式:

浏览学生的信息

要求:

只能浏览保存的学生信息

5修改函数

函数原型:

voidchangeDate(structstudent_type*head)

功能:

修改保存的学生信息

参数:

void

工作方式:

浏览学生的信息

要求:

只能修改保存的学生信息

6统计函数

函数原型:

structstudent_type*stat(structstudent_type*head)

功能:

按学号、按课程号求平均分、各分数段的人数与百分比;

按学号求不及格的门数。

按课程号求不及格的人数

参数:

struct

工作方式:

统计学生的信息

要求:

只能统计输入的学生信息

7删除函数

函数原型:

structstudent_type*delDate(structstudent_type*head)

功能:

删除学生的信息

参数:

void

工作方式:

删除学生的信息

要求:

只能删除保存的学生信息

工作方式:

删除学生的信息

要求:

只能删除保存的学生信息

8身份验证系统

函数原型:

voidmain()

功能:

验证用户的身份

参数:

void

工作方式:

验证身份

要求:

只能验证设置好的用户身份

9主函数

函数原型:

voidmain()

功能:

控制程序

参数:

void

要求:

管理菜单命令

10头函数

函数原型:

stdio.h

功能:

声明函数原型、包含文件、自定义及数据结构

要求:

报告是否能正常打开文件执行存入操作及存入记录的条数

2.5源程序

//sixStuMakeAdmin.cpp:

Definestheentrypointfortheconsoleapplication.

/*

学生成绩管理系统

a)用结构体形式实现对学生成绩的描述,结构体成员包括:

学号,姓名,语文,数学,英语;

b)能够进行数据记录的增加、查询、修改、统计、删除、保存;

c)能够将学生的基本信息存放在文件中,系统可以再次从文件中读出保存的数据;

d)定义一个操作命令集,例如

H----帮助

A----增加

R----浏览

M----修改

B----统计

D----删除

S----保存

F----查找

Q----退出

C----清除所有记录

*/

#include"stdio.h"

#include"malloc.h"

#include

#include

#include

#include

#defineNULL0

#defineLENsizeof(structstudent_type)

#defineLEN_Ssizeof(structstudent)

#defineNAME_LEN10

#defineFILENAME"score.dat"

#defineTEST0//0表示不输出测试信息,1表示输出

voidhomepage();

voidquit();//退出界面

voidmain()

{

inti,k=0,j;

charusername[15],pwd[6];

system("color3f");

printf("\n\n");

printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");

printf("\t┃**********************************************************┃\n");

printf("\t┃***┏━━━━━━━━━━━━━━━━━━━━━━━━┓***┃\n");

printf("\t┃***┃************************************************┃***┃\n");

printf("\t┃***┃*******┃***┃\n");

printf("\t┃***┃***欢迎使用学生成绩管理系统****┃***┃\n");

printf("\t┃***┃*******┃***┃\n");

printf("\t┃***┃*******┃***┃\n");

printf("\t┃***┃***电信七班刘萍****┃***┃\n");

printf("\t┃***┃*******┃***┃\n");

printf("\t┃***┃***2008.6.23****┃***┃\n");

printf("\t┃***┃*******┃***┃\n");

printf("\t┃***┃************************************************┃***┃\n");

printf("\t┃***┗━━━━━━━━━━━━━━━━━━━━━━━━┛***┃\n");

printf("\t┃**********************************************************┃\n");

printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");

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

{

printf("\n请输入用户名:

");

gets(username);

printf("\n请输入6位密码:

");

for(j=0;(pwd[j]=getch())!

=13;j++)

{

printf("*");

if(j>20)

break;

}

pwd[j]=0;if((strcmp(username,"0605020703")==0)&&(strcmp(pwd,"123456")==0))

{

printf("\n您已经成功登录\n");

k=1;

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

{

printf(".");

Sleep(100);

}

system("cls");

homepage();

break;

}

else

printf("\n用户名或密码无效请重新输入:

\n");

continue;

}

if(k==0)

printf("\n连续输入错误3次将退出程序\n");

Sleep(2000);

//quit();

}

structstudent{

longnum;//学号

charname[NAME_LEN];//姓名

floatchinese;//语文成绩

floatmath;//数学成绩

floatenglish;//英语成绩

};

structstudent_type{

structstudentstu;

structstudent_type*next;

};

intn;//学生个数

intnum_change=0;//改动的记录还没有保存的个数

//输出测试信息

voidtestprint(char*message){

if(TEST)

printf("%s\n",message);

}

//将文件中的数据读入到链表中,返回指向链表的头指针

structstudent_type*readDate(){

FILE*fp;

if((fp=fopen(FILENAME,"rb"))==NULL){

printf("can'topenfile\n");

}

structstudentstud;

structstudent_type*head;

structstudent_type*p1,*p2;

n=0;

//p1=p2=(structstudent_type*)malloc(LEN);

head=NULL;

while(fread(&stud,LEN_S,1,fp)==1){

n++;

//p1负责开辟新空间

p1=(structstudent_type*)malloc(LEN);

p1->stu.num=stud.num;

for(inti=0;i

p1->stu.name[i]=stud.name[i];

p1->stu.chinese=stud.chinese;

p1->stu.math=stud.math;

p1->stu.english=stud.english;

p1->next=NULL;

if(n==1){

p2=p1;

head=p2;

}

else{

//p2保存p1之前的数据

p2->next=p1;

p2=p1;

}

}

fclose(fp);

return(head);

}

//S----保存

structstudent_type*saveDate(structstudent_type*head){

if(num_change==0){

printf("****当前没有改动需要保存!

****\n");

return(head);

}

FILE*fp;

structstudent_type*p;

p=head;

if((fp=fopen(FILENAME,"wb"))==NULL){

printf("can'topenfile\n");

return(head);

}

n=0;//重新对记录条数记数

if(TEST)

printf("saveDate(head)>%d\n",p);

if(head!

=NULL)

do{

if(fwrite(p,LEN_S,1,fp)!

=1){

printf("filewriteerror\n");

}

else

n++;

p=p->next;

}while(p!

=NULL);

fclose(fp);

num_change=0;//保存了所有的记录,未保存数归零

printf("保存成功!

共记%d条记录\n",n);

return(head);

}

//R----浏览

voidbrowse(){

FILE*fp;

structstudentstud;

if((fp=fopen(FILENAME,"rb"))==NULL){

printf("\ncan'topenfile\n");

}

if(n==0)

printf("****没有记录****\n");

else{

printf("\n学生成绩表\n");

printf("==================================================\n");

printf("学号姓名语文数学英语\n");

while(fread(&stud,LEN_S,1,fp)==1){

printf("--------------------------------------------------\n");

printf("%8ld%-10s%-8.1f%-8.1f%-8.1f\n",stud.num,stud.name,stud.chinese,

stud.math,stud.english);

}

printf("==================================================\n");

}

printf("共记%d条记录\n",n);

}

//F----查找(查找学号为num的记录,返回指向那条记录的指针)

structstudent_type*find(structstudent_type*head,longnum){

if(head==NULL)//没有记录或学号为负了,学号应不小于为0

returnNULL;

structstudent_type*p1;

p1=head;

while(num!

=p1->stu.num&&p1->next!

=NULL){

//如果没找到所要的结点,并且没有到最后一下结点,p1后移一个结点

p1=p1->next;

}

if(num==p1->stu.num){//找到了

return(p1);

}

returnNULL;

}

//A----增加

structstudent_type*add(structstudent_type*head){

structstudent_type*newstudent;

structstudent_type*p;

chart;

longnumstu;//输入的学号

printf("你将增加1条记录\n");

//不允许输入相同的学号

printf("学号:

");

scanf("%ld",&numstu);

if(numstu<0){

printf("输入错误!

学号应该不小于零!

\n增加记录失败!

\n");

return(head);

}

intboolean=0;//0-false,1-true(有重复学号出现)

if(n==0)

boolean=0;//文件中没有记录,即没有重复学号

else{

structstudent_type*f=find(head,numstu);

if(f!

=NULL)

boolean=1;

else

boolean=0;

}

if(boolean){

printf("输入错误!

学号不能与库文件中的记录的学号相同!

\n可删除或修改已有记录。

\n增加记录失败!

\n");

return(head);

}

newstudent=(structstudent_type*)malloc(LEN);

newstudent->stu.num=numstu;

printf("姓名:

");

scanf("%s",newstudent->stu.name);

scanf("%c",&t);//接收回车

printf("语文:

");

scanf("%f",&newstudent->stu.chinese);

printf("数学:

");

scanf("%f",&newstudent->stu.math);

printf("英语:

");

scanf("%f",&newstudent->stu.english);

p=head;

head=newstudent;

newstudent->next=p;

num_change++;//增加没有保存的记录条数

printf("增加了1条记录\n");

printf("请输入S命令立即保存,否则会造成数据丢失!

\n");

return(head);

}

//B----统计

#defineM4

#defineN3

structstudent_type*stat(structstudent_type*head)

{

floatstudent[M][N];

floataverage[M]={0};

inti,j;

for(i=0;i

{

printf("请输入学号为%d学生3门课的成绩",i+1);

for(j=0;j

{

scanf("%f",&student[i][j]);

average[i]+=student[i][j];

}

}

for(i=0;i

printf("学号为%d个学生的平均成绩为%.2f\n",i+1,average[i]/N);

return0;

}

 

//D----删除

structstudent_type*delDate(structstudent_type*head){

//删除可能删掉头指针,所以要返回头指针

if(head==NULL){

printf("没有数据记录\n");return(head);

}

printf("你将删除1条记录\n");

structstudent_type*p1,*p2;

longnum_s;

printf("要删除的学生的学号:

");

scanf("%ld",&num_s);

if(num_s<0){

printf("输入错误!

学号应该不小于零!

\n删除记录失败!

\n");

return(head);

}

p1=head;

while(num_s!

=p1->stu.num&&p1->next!

=NULL){

p2=p1;

p1=p1->next;

}

if(num_s==p1->stu.num){

//显示查到的要删除的学生的信息

printf("****将要删除的学生的信息****\n");

printf("学号姓名语文数学英语\n");

printf("%8ld%-10s%-8.1f%-8.1f%-8.1f\n",p1->stu.num,p1->stu.name,p1->stu.chinese,p1->stu.math,p1->stu.english);

if(p1==head){

head=p1->next;

}

else

p2->next=p1->next;

num_change++;//增加没有保存的记录条数

printf("删除了1条记录\n");

printf("请输入S命令立即保存,否则会造成数据丢失!

\n");

}

else

printf("查无此人!

\n");

return(head);

}

//M----修改

voidchangeDate(structstudent_type*head){

if(head==NULL){

printf("****没有数据!

****\n");return;

}

printf("你将修改1条记录\n");

structstudent_type*p;

longnum_s,numstu;//修改前的学号 , 修改后的学号

printf("要作修改的学生的学号:

");

scanf("%ld",&num_s);

if(num_s<0){

printf("输入错误!

学号应该不小于零!

\n修改记录失败!

\n");

return;

}

if(n!

=0)

p=find(head,num_s);//查找要修改的记录

if(n==0||p==NULL){

printf("查无此人!

\n");

}

else{

//显示查到的学生的信息

printf("学号姓名语文数学英语\n");

printf("%8ld%-10s%-8.1f%-8.1f%-8.1f\n",p->stu.num,p->stu.name,p->stu.chinese,p->stu.math,p->stu.english);

printf("*****修改:

*

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

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1