数据结构之学生成绩管理系统方案Word文件下载.docx
《数据结构之学生成绩管理系统方案Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构之学生成绩管理系统方案Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
//学生成绩管理系统的查找函数,由主函数调用
voidStuAlter(Student*);
//学生成绩管理系统的修改函数,由主函数调用
voidStuInsert(Student*);
//学生成绩管理系统的插入函数,由主函数调用
voidStuDelect(Student*);
//学生成绩管理系统的删除函数,由主函数调用
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.流程图
四.代码:
#include<
stdio.h>
malloc.h>
string.h>
structStudent
{
charname[10];
charsubject[10];
intnum;
intgrade;
Student*next;
};
voidStuMain();
//学生成绩管理系统的主函数,由main函数调用
voidStuOutput(Student*p)//打印函数,将链表的该节点信息输出
printf("
学生:
"
);
%s"
p->
name);
printf("
学生号:
printf("
%d"
num);
科目:
"
subject);
学生成绩:
%d\n"
grade);
}
intStuImport(Student*head,Student*p)
Student*Opinion=(Student*)malloc(sizeof(Student));
//用来判断输入节点中学生号是否有重复
Opinion=head->
next;
\n"
scanf("
%s"
scanf("
%d"
&
p->
if(Opinion!
=NULL)
{
if(Opinion->
num==p->
num&
&
!
strcmp(Opinion->
subject,p->
subject))
{
printf("
该学生这门科目已有成绩,请重新输入\n"
return1;
}
Opinion=Opinion->
}
return0;
voidmain()
StuMain();
voidStuMain()
chardecide='
y'
;
//定义while变量,函数是否继续进行
intnum=1;
//定义switch变量,函数跳转到哪个子函数
Student*head;
//定义链表的头指针
head=(Student*)malloc(sizeof(Student));
//给头指针开辟空间
head->
next=NULL;
//初始化头指针
while(decide!
='
n'
)
{
***************************************************\n"
**********1输入2查找3修改4插入********\n"
**********5删除6存储7退出********\n"
switch(num)
case1:
StuInput(head);
break;
case2:
StuSelect(head);
case3:
StuAlter(head);
case4:
StuInsert(head);
case5:
StuDelect(head);
case6:
StuSave(head);
default:
decide='
}
};
voidStuInput(Student*head)//学生成绩管理系统的输入函数,由主函数调用
**1手动输入2文件输入3退出**\n"
StuInputHand(head);
StuInputFile(head);
voidStuInputHand(Student*head)//学生成绩管理系统的手动输入函数,由输入函数调用
if(head->
next==NULL)
Student*point=(Student*)malloc(sizeof(Student));
//链表中最后一个节点,只在该函数中存在
point->
intdecide=1;
while(decide!
=0)
Student*p=(Student*)malloc(sizeof(Student));
p->
StuImport(head,p);
if(head->
head->
next=p;
point=p;
else
point->
point=p;
printf("
是否继续:
1/0\n"
scanf("
decide);
else
管理系统中已存在信息,若想输入学生信息,请转插入子系统"
voidStuInputFile(Student*head)//学生成绩管理系统的文件输入函数,由输入函数调用
next!
学生管理系统中已有信息,请跳转到插入选项\n"
return;
FILE*fp;
请输入文件名(包括物理地址)\n"
charfilename[10];
filename);
if((fp=fopen(filename,"
r"
))==NULL)
{
cannotopenfile\n"
return;
}
Student*point=(Student*)malloc(sizeof(Student));
Student*Opinion=(Student*)malloc(sizeof(Student));
while(!
feof(fp)){
Opinion=head->
Student*p=(Student*)malloc(sizeof(Student));
fread(p,sizeof(Student),1,fp);
if(Opinion!
{
该文件中有重复学生信息,请验明再传输\n"
return;
}
};
while(Opinion->
next->
Opinion->
fclose(fp);
传输成功\n"
voidStuSelect(Student*head)//学生成绩管理系统的查找函数,由主函数调用
****1遍历2学号查找3科目查找4退出****\n"
StuSelectErg(head);
StuSelectNumFind(head);
StuSelectSubFind(head);
voidStuSelectErg(Student*head)//学生成绩管理系统的遍历函数,由查找函数调用
Student*p=(Student*)malloc(sizeof(Student));
p=head->
inti=1;
while(p!
第%d位学生信息:
i);
StuOutput(p);
p=p->
i++;
voidStuSelectNumFind(Student*head)//学生成绩管理系统的查找子系统,有查找函数调用
输入想要查找学生的学生号:
if(num==p->
num)
if(i==1)
没有该学生信息"
voidStuSelectSubFind(Student*head)//学生成绩管理系统的按科目查找函数,由查找函数调用
charSub[10];
输入想要查找科目:
Sub);
if(!
strcmp(Sub,p->
voidStuAlter(Student*head)//学生成绩管理系统的修改函数,由主函数调用
charSub[10];
输入修改成绩:
修改成功\n"
if(i==1)
voidStuInsert(Student*head)//学生成绩管理系统的插入函数,由主函数调用
point=head->
while(point->
point=point->
//找到尾结点
chardecide='
//定义while变量,函数是否继续进行
intnum;
****1头插2尾插3退出****\n"
StuImport(head,p);
p->
next=head->
head->
插入成功\n"
voidStuDelect(Student*head)//学生成绩管理系统的删除函数,由主函数调用
输入想要删除学生的学生号:
输入想要删除科目:
while(p->
StuOutput(p->
next);
是否删除:
i);
if(num==head->
strcmp(Sub,head->
next=p->
i=2;
删除成功\n"
break;
没有该学生信息\n"
voidStuSave(Student*head)//学生成绩管理系统的存储函数,由主函数调用
FILE*fp;
请输入存储文件名(包括物理地址)\n"
if((fp=fopen(filename,"
w"
))==NULL)
cannotopenfile"
return;
inputdata:
/n"
while(p!
fwrite(p,sizeof(Student),1,fp);
/*成块写入文件*/
p=p->
fclose(fp);