数据结构之学生成绩管理系统docx.docx

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

数据结构之学生成绩管理系统docx.docx

《数据结构之学生成绩管理系统docx.docx》由会员分享,可在线阅读,更多相关《数据结构之学生成绩管理系统docx.docx(24页珍藏版)》请在冰点文库上搜索。

数据结构之学生成绩管理系统docx.docx

数据结构之学生成绩管理系统docx

.

 

学生成绩管理系统

 

一、实验目的

1.通过此次课程设计中学生成绩管理系统的题目,掌握链表等数据结构的

基本操作方面的知识,并能灵活的解决一些基本的问题,加深对其性质及各项操

作的理解;

2.将所学数据结构方面的知识与一门具体的语言——C语言来进行实现,感受数据结构的强大作用,加深理解。

 

二、试验要求

 

管理系统中有五个要求:

输入查找修改插入删除存储

(1)输入要求:

能够通过键盘输入和文件输入两种

(2)查找要求:

能够根据学生号查找单个学生的信息,也可以遍历所有学生信息

(3)修改要求:

能够根据学生号修改单个学生所有信息

(4)插入要求:

能够实现头插和尾插

(5)删除要求:

能够根据学生号删除单个学生信息

(6)存储要求:

通过链表存储所有信息

三、算法的思想与算法实现步骤

 

1.基本思想

通过链表数据类型进行基本操作,主要有三个模块:

分别是主函数模块、

主要操作函数及基本操作函数。

其中,主函数负责其他子函数的调用实现以及基本界面的操作

主要函数包括:

 

voidStuInput(Student*);//学生成绩管理系统的输入函数,由主函数调用

 

voidStuSelect(Student*);//学生成绩管理系统的查找函数,由主函数调用

 

voidStuAlter(Student*);//学生成绩管理系统的修改函数,由主函数调用

 

voidStuInsert(Student*);//学生成绩管理系统的插入函数,由主函数调用

 

voidStuDelect(Student*);//学生成绩管理系统的删除函数,由主函数调用

 

Word范文

.

 

voidStuSave(Student*);//学生成绩管理系统的存储函数,由主函数调用

 

基本操作函数:

 

voidStuOutput(Student*p);//输出函数

 

intStuImport(Student*head,Student*p);//输入函数

 

voidStuInputHand(Student*head);//学生成绩管理系统的手动输入函数,由输入函

 

数调用

 

voidStuInputFile(Student*head);//学生成绩管理系统的文件输入函数,由输入函

 

数调用

 

voidStuSelectErg(Student*head);//学生成绩管理系统的遍历函数,由查找函数调

 

 

voidStuSelectNumFind(Student*head);//学生成绩管理系统的按学号查找函数,由查

 

找函数调用

 

voidStuSelectSubFind(Student*head);//学生成绩管理系统的按科目查找函数,由查

 

找函数调用

 

2.实现步骤

 

首先,分析题目要求划分实现模块,定义基本数据类型,诸如结构体、链表等;

其次,针对上述的基本操作实现具体需要进行的操作,具体实现每个环节需要进行的基本操作,即具体编写每个小函数实现功能;

最后,编写主函数对每个实现进行按需调用,实现操作。

3.流程图

 

Word范文

.

 

main

 

StuMain

 

StuInputStuSelectStuAlterStuInsertStuDelectStuSave

 

StuInputStuInputStuSelectEStuSelectNStuSelectSub

HandFilergumFindFind

 

四.代码:

#include

#include

#include

structStudent

{

charname[10];

charsubject[10];

intnum;

intgrade;

Student*next;

};

voidStuMain();//

学生成绩管理系统的主函数,由

main函数调用

voidStuInput(Student*);

//

学生成绩管理系统的输入函数,由主函数调用

voidStuSelect(Student*);//

学生成绩管理系统的查找函数,由主函数调用

voidStuAlter(Student*);

//

学生成绩管理系统的修改函数,由主函数调用

voidStuInsert(Student*);//

学生成绩管理系统的插入函数,由主函数调用

voidStuDelect(Student*);//

学生成绩管理系统的删除函数,由主函数调用

voidStuSave(Student*);

//

学生成绩管理系统的存储函数,由主函数调用

 

voidStuOutput(Student*p);//输出函数

intStuImport(Student*head,Student*p);//输入函数

 

Word范文

.

 

voidStuOutput(Student*p)//打印函数,将链表的该节点信息输出

{

printf("学生姓名:

");

printf("%s",p->name);

printf("学生号:

");

printf("%d",p->num);

printf("科目:

");

printf("%s",p->subject);

printf("学生成绩:

");

printf("%d\n",p->grade);

}

intStuImport(Student*head,Student*p)

{

Student*Opinion=(Student*)malloc(sizeof(Student));//用来判断

输入节点中学生号是否有重复

Opinion=head->next;

printf("学生姓名:

\n");

scanf("%s",p->name);

printf("学生号:

\n");

scanf("%d",&p->num);

printf("科目:

\n");

scanf("%s",p->subject);

if(Opinion!

=NULL)

{

if(Opinion->num==p->num&&!

strcmp(Opinion->subject,p->subject))

{

printf("该学生这门科目已有成绩,请重新输入\n");

return1;

}

Opinion=Opinion->next;

}

printf("学生成绩:

\n");

scanf("%d",&p->grade);

return0;

}

voidmain()

{

StuMain();

}

 

voidStuMain()

{

chardecide='y';//定义while变量,函数是否继续进行

intnum=1;//定义switch变量,函数跳转到哪

 

Word范文

.

 

个子函数

Student*head;//定义链表的头指针

head=(Student*)malloc(sizeof(Student));//给头指针开辟空间

head->next=NULL;//初始化头指针

while(decide!

='n')

{

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

printf("**********1输入2查找3修改4插入********\n");

printf("**********5删除6存储7退出********\n");

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

scanf("%d",&num);

switch(num)

{

case1:

StuInput(head);

break;

case2:

StuSelect(head);

break;

case3:

StuAlter(head);

break;

case4:

StuInsert(head);

break;

case5:

StuDelect(head);

break;

case6:

StuSave(head);

break;

default:

decide='n';

break;

}

 

};

}

 

voidStuInputHand(Student*head);//学生成绩管理系统的手动输入函数,由输入函

数调用

voidStuInputFile(Student*head);//学生成绩管理系统的文件输入函数,由输入函

数调用

 

Word范文

.

 

voidStuInput(Student*head)//学生成绩管理系统的输入函数,由主函数调用

{

chardecide='y';//定义while变量,函数是否继续进行

intnum;//定义switch变量,函数跳转到哪个

子函数

while(decide!

='n')

{

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

printf("**1手动输入2文件输入3退出**\n");printf("***************************************************\n");

scanf("%d",&num);

switch(num)

{

case1:

StuInputHand(head);

break;

case2:

StuInputFile(head);

default:

decide='n';

break;

}

}

}

 

voidStuInputHand(Student*head)//学生成绩管理系统的手动输入函数,由输入函数

调用

{

if(head->next==NULL)

{

Student*point=(Student*)malloc(sizeof(Student));//链表中

最后一个节点,只在该函数中存在

point->next=NULL;

intdecide=1;

while(decide!

=0)

{

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

p->next=NULL;

StuImport(head,p);

if(head->next==NULL)

{

head->next=p;

point=p;

 

Word范文

.

 

}

else

{

point->next=p;

point=p;

}

printf("是否继续:

1/0\n");

scanf("%d",&decide);

}

}

else

printf("管理系统中已存在信息,若想输入学生信息,请转插入子系统");

}

voidStuInputFile(Student*head)//学生成绩管理系统的文件输入函数,由输入函数调用

 

{

if(head->next!

=NULL)

{

printf("学生管理系统中已有信息,请跳转到插入选项\n");

return;

}

FILE*fp;

printf("请输入文件名(包括物理地址)\n");

charfilename[10];

scanf("%s",filename);

if((fp=fopen(filename,"r"))==NULL)

{

printf("cannotopenfile\n");

return;

}

Student*point=(Student*)malloc(sizeof(Student));

Student*Opinion=(Student*)malloc(sizeof(Student));//用来

判断输入节点中学生号是否有重复

while(!

feof(fp)){

Opinion=head->next;

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

p->next=NULL;

fread(p,sizeof(Student),1,fp);

if(Opinion!

=NULL)

{

if(Opinion->num==p->num&&!

strcmp(Opinion->subject,p->subject))

{

printf("该文件中有重复学生信息,请验明再传输\n");

head->next=NULL;

 

Word范文

.

 

return;

}

Opinion=Opinion->next;

}

if(head->next==NULL)

{

head->next=p;

point=p;

}

else

{

point->next=p;

point=p;

}

};

Opinion=head->next;

while(Opinion->next!

=NULL)

{

Opinion=Opinion->next;

if(Opinion->next->next==NULL)

Opinion->next=NULL;

};

fclose(fp);

printf("传输成功\n");

}

 

voidStuSelectErg(Student*head);//学生成绩管理系统的遍历函数,由查找函数调

voidStuSelectNumFind(Student*head);//学生成绩管理系统的按学号查找函数,由查

找函数调用

voidStuSelectSubFind(Student*head);//学生成绩管理系统的按科目查找函数,由查

找函数调用

 

voidStuSelect(Student*head)//学生成绩管理系统的查找函数,由主函数调用

{

chardecide='y';//定义while变量,函数是否继续进行

intnum;//定义switch变量,函数跳转到哪个

子函数

while(decide!

='n')

{

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

printf("****1遍历2学号查找3科目查找4退出****\n");

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

scanf("%d",&num);

 

Word范文

.

 

switch(num)

{

case1:

StuSelectErg(head);

break;

case2:

StuSelectNumFind(head);

break;

case3:

StuSelectSubFind(head);

break;

default:

decide='n';

break;

}

}

}

voidStuSelectErg(Student*head)//学生成绩管理系统的遍历函数,由查找函数调用

{

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

p=head->next;

inti=1;

while(p!

=NULL)

{

printf("第%d位学生信息:

\n",i);

StuOutput(p);

p=p->next;

i++;

}

}

voidStuSelectNumFind(Student*head)//学生成绩管理系统的查找子系统,有查找函

数调用

{

intnum;

printf("输入想要查找学生的学生号:

\n");

scanf("%d",&num);

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

p=head->next;

inti=1;

while(p!

=NULL)

{

if(num==p->num)

{

StuOutput(p);

 

Word范文

.

 

i++;

}

p=p->next;

}

if(i==1)

printf("没有该学生信息");

}

voidStuSelectSubFind(Student*head)//学生成绩管理系统的按科目查找函数,由查

找函数调用

{

charSub[10];

printf("输入想要查找科目:

\n");

scanf("%s",Sub);

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

p=head->next;

inti=1;

while(p!

=NULL)

{

if(!

strcmp(Sub,p->subject))

{

StuOutput(p);

i++;

}

p=p->next;

}

if(i==1)

printf("没有该学生信息");

}

voidStuAlter(Student*head)//学生成绩管理系统的修改函数,由主函数调用

{

intnum;

printf("输入想要查找学生的学生号:

\n");

scanf("%d",&num);

charSub[10];

printf("输入想要查找科目:

\n");

scanf("%s",Sub);

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

p=head->next;

inti=1;

while(p!

=NULL)

{

if(num==p->num&&!

strcmp(Sub,p->subject))

{

printf("输入修改成绩:

\n");

 

Word范文

.

 

scanf("%d",&p->grade);

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

i++;

}

p=p->next;

if(i==1)

printf("没有该学生信息");

}

}

 

voidStuInsert(Student*head)//学生成绩管理系统的插入函数,由主函数调用

{

 

Student*point=(Student*)malloc(sizeof(Student));

point=head->next;

while(point->next!

=NULL)

point=point->next;//找到尾结点

chardecide='y';//定义while变量,函数是否继续进行

intnum;//定义switch变量,函数跳转到哪个子函数

while(decide!

='n')

{

printf("

***************************************************\n");

printf("****1头插2尾插3退出

****\n");

printf("

***************************************************\n");

scanf("%d",&num);

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

switch(num)

{

case1:

StuImport(head,p);

p->next=head->next;

head->next=p;

printf("插入成功\n");

break;

case2:

StuImport(head,p);

point->next=p;

p->next=NULL;

printf("插入成功\n");

break;

default:

 

Word范文

.

 

decide='n';

break;

}

}

 

}

voidStuDelect(Student*head)//学生成绩管理系统的删除函数,由主函数调用

{

intnum;

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

\n");

scanf("%d",&num);

charSub[10];

printf("输入想要删除科目:

\n");

scanf("%s",Sub);

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

p->next=head->next;

inti=1;

while(p->next!

=NULL)

{

if(num==p->next->num&&!

strcmp(Sub,p->next->subject))

{

StuOutput(p->next);

printf("是否删除:

1/0\n");

scanf("%d",&i);

if(num==head->next->num&&!

strcmp(Sub,head->next->subject))

{

head->next=head->next->next;

}

else

{

p->next=p->next->next;

}

i=2;

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

break;

}

p=p->next;

 

}

if(i==1)

printf("没有该学生信息\n");

}

 

Word范文

.

 

voidStuSave(Student*head)//学生成绩管理系统的存储函数,由主函数调用

{

FILE*fp;

charfilename[10];

printf("请输入存储文件名(包括物理地址)\n");

scanf("%s",filename);

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

p=head->next;

if((fp=fopen(filename,"w"))==NULL)

{

printf("cannotopenfile");

return;

}

printf("inputdata:

/n");

while(p!

=NULL)

{

fwrite(p,sizeof(Student),1,fp);/*成块写入文件*/p=p->next;

 

}

fclose(fp);

}

欢迎您的光

临,

word文

档下载

后可以

修改

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

当前位置:首页 > 法律文书 > 调解书

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

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