延安大学计算机学院学生成绩管理系统.docx

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

延安大学计算机学院学生成绩管理系统.docx

《延安大学计算机学院学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《延安大学计算机学院学生成绩管理系统.docx(25页珍藏版)》请在冰点文库上搜索。

延安大学计算机学院学生成绩管理系统.docx

延安大学计算机学院学生成绩管理系统

延安大学计算机学院

学生成绩管理系统

课程设计

 

专业:

计算机科学与技术

年级:

计科13—1

姓名:

学号:

指导教师:

2014.09.05

目录

一、课程设计题目3

二、本次课程设计应达到的目的3

三、本次课程设计任务的主要内容和要求3

四、功能……………………………………………………..3

五.系统整体结构5

六、源代码5

七、课程设计总结………………………………………15

八、参考文献…………………………………………….16

一、课程设计题目

学生成绩管理系统

二、本次课程设计应达到的目的

1.通过该题目的设计,使学生掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。

2.掌握指针或数组、结构体、文件的操作方法。

.三、本次课程设计任务的主要内容和要求:

主要内容:

包括原始数据、技术参数、设计要求等。

要求:

要求能够实现输入记录、查询记录、更新记录、统计记录、输出记录等功能。

1.输入记录。

对每个学生的学号、姓名、班级、数学、英语、计算机成绩进行输入并存储,在程序的运行过程中,数据的存储可以采用结构体数组或者链表,但是最终应该存储在文件中。

2.维护记录。

能够实现添加、删除、修改学生记录,但是一定要将最终数据存储到文件中。

3.查询记录。

根据班级、学号、科目等查询学生的成绩。

如果查询时学生数据并没有读入到结构体数组或者链表中,则应该先从文件中读出数据并存储在结构体数组或者链表中,然后在结构体数组或者链表中查询满足条件的数据。

.四、功能能够实现输入记录、查询记录、更新记录、统计记录、输出记录等功能。

1.输入记录:

对每个学生的学号、姓名、班级、数学、英语、计算机成绩进行输入并存储,在程序的运行过程中,数据的存储可以采用结构体数组或者链表,但是最终应该存储在文件中。

2.维护记录:

能够实现添加、删除、修改学生记录,但是一定要将最终数据存储到文件中。

3.查询记录:

根据班级、学号、科目等查询学生的成绩。

如果查询时学生数据并没有读入到结构体数组或者链表中,则应该先从文件中读出数据并存储在结构体数组或者链表中,然后在结构体数组或者链表中查询满足条件的数据。

4.统计记录:

完成对各门功课最高分和不及格人数的统计。

五、系统整体结构

 

六、源代码

#include

#include

#include

#include

typedefstructSTUDENT

{

charstudentNumber[10];/*学生学号*/

charstudentName[20];/*学生姓名*/

charclassName[20];/*班级名称*/

charyearName[20];/*学期名称*/

floatmark1;/*第1门成绩*/

floatmark2;/*第2门成绩*/

floatmark3;/*第3门成绩*/

structSTUDENT*next;

}STUDENT;

STUDENT*headLink;/*链表表头指针*/

/*以下是函数声明*/

voidReadInfoFormFile(void);

voidDesplayMenu(void);

voidCreateHeadLink(void);

STUDENT*MallocNode(void);

voidGetInformation(STUDENT*t);

voidOutputInformation(void);

voidDesplayInfoBystudentName(void);

voidDesplayOneNode(STUDENT*t);

voidInsertOneNode(STUDENT*t);

voidDeleteNodeBystudentNumber(void);

voidChangeMarkByName(void);

voidChangeMarkByNumber(void);

voidSaveLinkToFile(void);

voidDesplayMarkSegment(void);

voidCompositorByTotalMark(void);

intchoose;/*用于接受用户的选择*/

/*主函数*/

voidmain()

{

CreateHeadLink();

ReadInfoFormFile();

DesplayMenu();

}

/************************************函数功能:

从文件中读学生信息到链表中************************************/

voidReadInfoFormFile(void)

{

FILE*fp;

STUDENT*p;

fp=fopen("student.txt","r");

if(!

fp)

{

printf("文件不存在\n");

return;

}

p=MallocNode();

while(fscanf(fp,"%s%s%s%f%f%f",p->studentNumber,p->studentName,p->className,&(p->mark1),&(p->mark2),&(p->mark3))>0)

{

InsertOneNode(p);

p=MallocNode();

}

fclose(fp);

}

/************************************函数功能:

显示菜单,根据用户的输入完成相应的功能************************************/

voidDesplayMenu(void)

{

STUDENT*p;

printf("-------请选择相应功能------------\n\n");

printf("|1按班级输出学生成绩单|\n");

printf("|2按姓名查询|\n");

printf("|3增加学生|\n");

printf("|4删除学生|\n");

printf("|5按班级修改学生成绩|\n");

printf("|6按学期修改学生成绩|\n");

printf("|7保存所有学生信息|\n");

printf("|8显示不及格学生成绩|\n");

printf("|9按平均成绩排序并输出绩|\n");

printf("|10退出|\n\n");

scanf("%d",&choose);/*取得用户的选择*/

switch(choose)

{

case1:

OutputInformation();/*显示所有学生的信息*/

break;

case2:

DesplayInfoBystudentName();

break;

case3:

p=MallocNode();/*先申请一个新结点*/

GetInformation(p);/*要求用户输入信息到新结点中*/

InsertOneNode(p);/*将新结点加到链表中*/

break;

case4:

DeleteNodeBystudentNumber();/*根据用户输入的学号删除该学生*/

break;

case5:

ChangeMarkByName();/*根据用户输入的姓名修改学生成绩*/

break;

case6:

ChangeMarkByNumber();/*根据用户输入的学号修改学生成绩*/

break;

case7:

SaveLinkToFile();/*保存数据*/

break;

case8:

DesplayMarkSegment();/*显示不及格的学生成绩*/

break;

case9:

CompositorByTotalMark();/*按平均成绩排序*/

break;

case10:

SaveLinkToFile();/*保存数据后再退出*/

free(headLink);

break;

default:

break;

}

DesplayMenu();/*递归调用*/

}

/************************************函数功能:

建立链表表头************************************/

voidCreateHeadLink(void)

{

STUDENT*p;

p=(STUDENT*)malloc(sizeof(STUDENT));

headLink=p;

p->next=NULL;

}

/************************************函数功能:

申请一个新结点,并将其初始化************************************/

STUDENT*MallocNode(void)

{

STUDENT*p;

inti;

p=(STUDENT*)malloc(sizeof(STUDENT));

if(p==NULL)

returnNULL;

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

p->studentNumber[i]='\0';

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

p->studentName[i]='\0';

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

p->className[i]='\0';

p->mark1=0.0;

p->mark2=0.0;

p->mark3=0.0;

p->next=NULL;

returnp;

}

/************************************函数功能:

取得用户输入的学生信息************************************/

voidGetInformation(STUDENT*t)

{

printf("请输入学生学号:

\n");

scanf("%s",t->studentNumber);

printf("请输入学生姓名:

\n");

scanf("%s",t->studentName);

printf("请输入该生所在班级:

\n");

scanf("%s",t->className);

printf("请输入第1门成绩:

\n");

scanf("%f",&(t->mark1));

printf("请输入第2门成绩:

\n");

scanf("%f",&(t->mark2));

printf("请输入第3门成绩:

\n");

scanf("%f",&(t->mark3));

}

/************************************函数功能:

在链表的结尾处增加一个结点************************************/

voidInsertOneNode(STUDENT*t)

{

STUDENT*p;

p=headLink;

while(p->next)

{

p=p->next;

}

p->next=t;

}

/************************************函数功能:

根据用户输入的学生姓名显示该学生的信息************************************/

voidDesplayInfoBystudentName(void)

{

STUDENT*p;

charstudentName[20];

charflag=0;

p=headLink->next;

printf("请输入学生姓名:

\n");

scanf("%s",studentName);

while(p)

{

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

{

printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");

DesplayOneNode(p);

flag=1;

break;

}

p=p->next;

}

if(!

flag)

printf("对不起,不存在姓名为%s的学生\n",studentName);

}

/************************************函数功能:

输出一个结点的信息************************************/

voidDesplayOneNode(STUDENT*t)

{

printf("%s\t",t->studentNumber);

printf("%s\t",t->studentName);

printf("%s\t",t->className);

printf("%.2f\t",t->mark1);

printf("%.2f\t",t->mark2);

printf("%.2f\t",t->mark3);

printf("%.2f\t",t->mark1+t->mark2+t->mark3);

printf("%.2f\t\n",(t->mark1+t->mark2+t->mark3)/3);

}

/************************************函数功能:

根据用户输入的学号删除该学生************************************/

voidDeleteNodeBystudentNumber(void)

{

charstudentNumber[10];

STUDENT*p,*q;

charflag=0;

printf("请输入要删除的学生学号:

");

scanf("%s",studentNumber);

p=headLink;

q=headLink->next;

while(q)

{

if(strcmp(q->studentNumber,studentNumber)==0)

{

p->next=q->next;

free(q);

flag=1;

break;

}

p=p->next;

q=q->next;

}

if(!

flag)

{

printf("不存在该学号的学生\n");

return;

}

printf("成功删除\n");

}

/************************************函数功能:

显示所有学生的信息************************************/

voidOutputInformation(void)

{

STUDENT*p;

p=headLink->next;

if(p==NULL)

{

printf("现在没有学生信息,请先输入学生信息\n\n");

return;

}

printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");

while(p)

{

DesplayOneNode(p);

p=p->next;

}

}

/************************************函数功能:

根据输入的班级修改成绩************************************/

voidChangeMarkByName(void)

{

STUDENT*p;

inta;

charstudentName[20];

charflag=0;

floatmark1,mark2,mark3;

p=headLink->next;

printf("请输入学生班级:

\n");

scanf("%d",&a);

printf("请输入学生姓名:

\n");

scanf("%s",studentName);

while(p)

{

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

{

printf("请输入新的第1门成绩:

\n");

scanf("%f",&mark1);

printf("请输入新的第2门成绩:

\n");

scanf("%f",&mark2);

printf("请输入新的第3门成绩:

\n");

scanf("%f",&mark3);

p->mark1=mark1;

p->mark2=mark2;

p->mark3=mark3;

flag=1;

printf("修改成功\n");

break;

}

p=p->next;

}

if(!

flag)

printf("对不起,不存在班级为%s的学生\n",studentName);

}

/************************************函数功能:

根据输入的学期修改成绩************************************/

voidChangeMarkByNumber(void)

{

STUDENT*p;

intb;

charstudentNumber[20];

charflag=0;

floatmark1,mark2,mark3;

p=headLink->next;

printf("请输入学生所在学期:

\n");

scanf("%d",&b);

printf("请输入学生学号:

\n");

scanf("%s",studentNumber);

while(p)

{

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

{

printf("请输入新的第1门成绩:

\n");

scanf("%f",&mark1);

printf("请输入新的第2门成绩:

\n");

scanf("%f",&mark2);

printf("请输入新的第3门成绩:

\n");

scanf("%f",&mark3);

p->mark1=mark1;

p->mark2=mark2;

p->mark3=mark3;

flag=1;

printf("修改成功\n");

break;

}

p=p->next;

}

if(!

flag)

printf("对不起,不存在学期为%s的学生\n",studentNumber);

}

/************************************函数功能:

保存链表数据到文件中************************************/

voidSaveLinkToFile(void)

{

STUDENT*p;

FILE*fp;

p=headLink->next;

if(p==NULL)

{

printf("现在没有学生信息,请先输入学生信息\n\n");

return;

}

fp=fopen("student.txt","w+");

if(!

fp)

{

printf("文件不存在\n");

return;

}

while(p)

{

fprintf(fp,"%s%s%s%f%f%f\n",p->studentNumber,p->studentName,p->className,p->mark1,p->mark2,p->mark3);

p=p->next;

}

fclose(fp);

}

/************************************函数功能:

不及格学生成绩************************************/

voidDesplayMarkSegment(void)

{

STUDENT*p;

intcount=0;

p=headLink->next;

printf("60分以下(不及格)的学生成绩如下:

\n");

printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");

while(p)

{

if((6>((int)(p->mark1/10)))||(6>((int)(p->mark2/10)))||(6>((int)(p->

mark3/10))))/*只要有一科不及格就认为该生不及格*/

{

count++;

DesplayOneNode(p);

}

p=p->next;

}

printf("不及格的学生一共有%d人\n",count);

}

/************************************函数功能:

按平均成绩排序************************************/

voidCompositorByTotalMark(void)

{

STUDENTexchange,*r,*p,*q;

r=headLink->next;

if(r==NULL)

{

printf("现在还没学生信息,请先输入学生信息\n");

return;

}

while(r)/*两层while循环实现排序*/

{

p=r;

q=r->next;

while(q)

{

if((q->mark1+q->mark2+q->mark3)>(p->mark1+p->mark2+p->mark3))

{

strcpy(exchange.studentNumber,q->studentNumber);/*先复制q结点信息到exchange*/

strcpy(exchange.studentName,q->studentName);

strcpy(exchange.className,q->className);

exchange.mark1=q->mark1;

exchange.mark2=q->mark2;

exchange.mark3=q->mark3;

strcpy(q->studentNumber,p->studentNumber);/*再复制p结点信息到q*/

strcpy(q->studentName,p->studentName);

strcpy(q->className,p->className);

q->mark1=p->mark1;

q->mark2=p->mark3;

q->mark3=p->mark3;

strcpy(p->studentNumber,exchange.studentNumber)

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

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

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

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