学生成绩管理系统报告.docx
《学生成绩管理系统报告.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统报告.docx(22页珍藏版)》请在冰豆网上搜索。
![学生成绩管理系统报告.docx](https://file1.bdocx.com/fileroot1/2022-11/25/2ba34348-6b64-4ecf-897a-800a7e2b5109/2ba34348-6b64-4ecf-897a-800a7e2b51091.gif)
学生成绩管理系统报告
课程设计报告
课程名称:
数据结构课程设计
设计题目:
学生成绩管理系统
学院:
信息科学与工程学院
专业:
计算机科学与技术
姓名:
指导教师:
二零一三年十二月二十七日
一、设计内容及要求
设计内容:
利用线性链表实现学生成绩管理系统
具体要求:
(1)可以对所有学生的信息输入,并保存在文件中。
可以输出显示学生信息。
(2)可以插入、删除、查找、追加学生信息。
二、算法设计
程序的总体框架
二、算法实现
#include
#include
#include
structstudents
{
charNum[10];/*字符型学生学号*/
charName[20];/*学生姓名*/
charSex[3];/*学生性别*/
doubleEnglish;/*双精度型英语成绩*/
doubleriyu;/*日语成绩*/
doubleSjjg;/*数据结构成绩*/
doubletiyu;/*体育成绩*/
doubleshuxue;/*离散数学成绩*/
structstudents*next;/*用与构建连表指向下一结点*/
};
voidmenu();/*主菜单*/
voidXiugaimenu();/*修改菜单*/
structstudents*Input();/*新建学生信息*/
voidfprint(structstudents*head);/*将信息导入文件*/
voidfprint_(structstudents*head);/*将信息导入文件并覆盖*/
voidXianshi(structstudents*head);/*浏览全部学生信息*/
structstudents*create(structstudents*head);/*从文件读取数据构建链表*/
voidFindofNum(structstudents*head);/*按学号查询学生信息*/
voidFindofNname(structstudents*head);/*按姓名查询学生信息*/
structstudents*Insert(structstudents*head);/*根据姓名插入学生信息*/
structstudents*Delete(structstudents*head);/*按学号删除学生成绩信息*/
structstudents*Xiugai();/*修改学生信息*/
/*主菜单*/
voidmenu()
{
printf("\n\n");
printf("***************************************************\n");
printf("学生成绩管理系统\n");
printf("---------------------------------------------------\n");
printf("1-添加新同学2-显示学生信息\n");
printf("3-按学号查找4-按姓名查找\n");
printf("5-插入新同学6-修改学生信息\n");
printf("7-删除学生信息0-退出系统\n");
printf("---------------------------------------------------\n");
printf("___________________________________________________\n");
}
/*修改菜单*/
voidXiugaimenu()
{
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("1--修改学生姓名2--修改学生学号\n");
printf("3--修改学生性别4--修改英语成绩\n");
printf("5--修改日语成绩6--修改数据结构\n");
printf("7--修改体育成绩8--修改数学成绩\n");
printf("0--返回上级菜单\n");
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
}
/*新建学生信息*/
structstudents*Input()
{
structstudents*p1,*p2,*head;/*建立结点及头结点*/
charName;
intx;
printf("\n请按对应项输入学生信息以#结束:
\n");
printf("姓名学号性别英语日语数据结构体育成绩离散数学成绩\n");
p1=(structstudents*)malloc(sizeof(structstudents));
head=p2=p1;
do{/*输入学生信息*/
scanf("%s",&p1->Name);
if(strcmp(p1->Name,"#")==0)
break;
else
{
scanf("%s%s%lf%lf%lf%lf%lf",p1->Num,p1->Sex,&p1->English,&p1->riyu,&p1->Sjjg,&p1->tiyu,&p1->shuxue);
}
p1=(structstudents*)malloc(sizeof(structstudents));
p2->next=p1;
p2=p1;
}while
(1);
p1->next=NULL;
printf("学生信息输入结束!
\n");
printf("是否保存学生信息?
(1.是/2.否):
");
scanf("%d",&x);
if(x==1)
fprint(head);/*调用函数保存至文件*/
else
printf("\n文件没有被保存!
\n");
returnhead;/*返回头指针*/
}
/*将信息导入文件*/
voidfprint(structstudents*head)
{
structstudents*p1;
FILE*fp;
if((fp=fopen("h:
\\students_list.txt","a"))==NULL)
{
printf("Fileopenerror!
\n");
exit(0);
}
for(p1=head;p1->next!
=NULL;p1=p1->next)/*遍历*/
fprintf(fp,"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p1->Name,p1->Num,p1->Sex,p1->English,p1->riyu,p1->Sjjg,p1->tiyu,p1->shuxue);/*将学生信息写入文件*/
fclose(fp);/*关闭文件*/
printf("\n学生信息已成功保存到文件students_list.txt中!
\n");
}
/*将信息导入文件并覆盖*/
voidfprint_(structstudents*head)
{
structstudents*p1;
FILE*fp;
if((fp=fopen("h:
\\students_list.txt","w"))==NULL)
{
printf("Fileopenerror!
\n");
exit(0);
}
for(p1=head;p1!
=NULL;p1=p1->next)/*遍历*/
fprintf(fp,"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p1->Name,p1->Num,p1->Sex,p1->English,p1->riyu,p1->Sjjg,p1->tiyu,p1->shuxue);/*将学生信息写入文件*/
fclose(fp);/*关闭文件*/;
}
/*浏览全部学生信息*/
voidXianshi(structstudents*head)
{
charNum[10];/*字符型学生学号*/
charName[20];/*学生姓名*/
charSex[3];/*学生性别*/
doubleEnglish;/*双精度型英语成绩*/
doubleriyu;/*日语成绩*/
doubleSjjg;/*数据结构成绩*/
doubletiyu;/*体育成绩*/
doubleshuxue;/*离散数学成绩*/
FILE*fp;
if((fp=fopen("h:
\\students_list.txt","r"))==NULL)
{
printf("Fileopenerror!
\n");
exit(0);
}
printf("-------------------------------------------------------------\n");
printf("姓名学号性别英语日语数据结构体育成绩离散数学\n");
while(!
feof(fp))/*当源文件未结束时进行循环*/
{
fscanf(fp,"%s%s%s%lf%lf%lf%lf%lf",Name,Num,Sex,&English,&riyu,&Sjjg,&tiyu,&shuxue);
printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",Name,Num,Sex,English,riyu,Sjjg,tiyu,shuxue);
};
fclose(fp);
}
/*从文件中读取数据构建链表*/
structstudents*create(structstudents*head)
{
FILE*fp;
structstudents*p,*p1,*p2;
if((fp=fopen("h:
\\students_list.txt","a+"))==NULL)
{
printf("Fileopenerror!
\n");
exit(0);
}
while(!
feof(fp))//当源文件未结束时进行循环
{
p=(structstudents*)malloc(sizeof(structstudents));
fscanf(fp,"%s%s%s%lf%lf%lf%lf%lf",p->Name,p->Num,p->Sex,&p->English,&p->riyu,&p->Sjjg,&p->tiyu,&p->shuxue);
if(head==NULL)
{
head=p;
p1=p;
}
else
{
p1->next=p;
p2=p1;
p1=p;
}
}
p2->next=NULL;
free(p);
fclose(fp);
returnhead;
}
/*按姓名查询学生信息*/
voidFindofName(structstudents*head)
{
inti=0;
charb[20];
structstudents*p;
head=create(head);
p=head;
printf("\n请输入要查询的学生姓名:
");
scanf("%s",b);
while(p!
=NULL)
{
if(strcmp(p->Name,b)==0)
{
printf("姓名学号性别英语日语数据结构体育成绩离散数学\n");
printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->riyu,p->Sjjg,p->tiyu,p->shuxue);
i++;
}
p=p->next;
}
if(i==0)
printf("\n对不起!
没有找到名为%s的学生信息!
\n",b);
}
/*按学号查询学生信息*/
voidFindofNum(structstudents*head)
{
inti=0;
charb[20];
structstudents*p;
head=create(head);
p=head;
printf("\n请输入要查询的学生学号:
");
scanf("%s",b);
while(p!
=NULL){
if(strcmp(p->Num,b)==0){
printf("姓名学号性别英语日语数据结构体育成绩离散数学\n");
printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->riyu,p->Sjjg,p->tiyu,p->shuxue);
i++;
}
p=p->next;
}
if(i==0)
printf("\n对不起!
没有找到学号为%s学生信息!
\n",b);
}
/*插入学生信息*/
structstudents*Insert(structstudents*head)
{
structstudents*p0,*p1,*p2;
charb[20];
Xianshi(head);
head=create(head);
p0=(structstudents*)malloc(sizeof(structstudents));
p0->next=NULL;
printf("插入指定姓名前面:
");
scanf("%s",b);
printf("姓名学号性别英语日语数据结构体育成绩离散数学\n");
scanf("%s%s%s%lf%lf%lf%lf%lf",p0->Name,p0->Num,p0->Sex,&p0->English,&p0->riyu,&p0->Sjjg,&p0->tiyu,&p0->shuxue);//将学生信息写入文件
getchar();
if(head==NULL)head=p0;
else
{
p1=head;
while((strcmp(p1->Name,b)!
=0)&&(p1->next!
=NULL))
{
p2=p1;
p1=p1->next;
}
if(strcmp(p1->Name,b)==0)
{
p2->next=p0;
p0->next=p1;
}
else
p1->next=p0;
}
fprint_(head);
printf("\n姓名为'%s'学生信息已被插入指定姓名前,并保存至文件!
\n",p0->Name);
returnhead;
}
/*按学号删除学生成绩信息*/
structstudents*Delete(structstudents*head)
{
structstudents*p1,*p2;
charm[15];
printf("\n所有学生信息如下:
\n");
Xianshi(head);
printf("\n请输入想要删除的学生学号:
");
scanf("%s",m);
head=create(head);
if(head==NULL)
{
printf("无学生信息!
\n");
returnhead;
}
if(strcmp(head->Num,m)!
=0)
{
p1=head;
p2=head->next;
while(p2!
=NULL)
{
if(strcmp(p2->Num,m)==0)
{
p1->next=p2->next;
free(p2);
}
else
p1=p2;
p2=p1->next;
}
}
fprint_(head);
printf("\n学号为'%s'学生信息已被删除,并保存至文件!
\n",m);
returnhead;
}
/*修改学生信息(按编号修改)*/
structstudents*Xiugai()
{
intt;
charnum[10];
charNum[10];/*字符型学生学号*/
charName[20];/*字符型学生姓名*/
charSex[3];/*字符型学生性别*/
doubleEnglish;/*双精度实型英语成绩*/
doubleriyu;/*双精度实型日语成绩*/
doubleSjjg;/*双精度实数据结构*/
doubletiyu;/*双精度实型体育成绩*/
doubleshuxue;/*离散数学*/
structstudents*head=NULL;
structstudents*p;
printf("\n所有学生信息如下:
\n");
Xianshi(head);
head=create(head);
printf("\n输入需要修改的学生的学号:
");
scanf("%s",num);
p=head;
while(head!
=NULL)
{
if(strcmp(p->Num,num)==0)
{
system("cls");
Xiugaimenu();
printf("编号为%s的学生信息如下:
\n",num);
printf("姓名学号性别英语日语数据结构体育成绩离散数学\n");
printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",p->Name,p->Num,p->Sex,p->English,p->riyu,p->Sjjg,p->tiyu,p->shuxue);
while
(1)
{
printf("请选择需要修改的信息:
");
scanf("%d",&t);
switch(t)
{
case1:
printf("请输入新姓名:
");
scanf("%s",Name);
strcpy(p->Name,Name);
break;
case2:
printf("请输入新学号:
");
scanf("%s",&Num);
strcpy(p->Num,Num);
break;
case3:
printf("请输入新性别:
");
scanf("%s",Sex);
strcpy(p->Sex,Sex);
break;
case4:
printf("请输入新英语成绩:
");
scanf("%lf",&English);
p->English=English;
break;
case5:
printf("请输入新日语成绩:
");
scanf("%lf",&riyu);
p->riyu=riyu;
break;
case6:
printf("请输入新数据结构成绩:
");
scanf("%lf",&Sjjg);
p->Sjjg=Sjjg;
break;
case7:
printf("请输入新体育成绩:
");
scanf("%lf",&tiyu);
p->tiyu=tiyu;
break;
case8:
printf("请输入新数学成绩:
");
scanf("%lf",&shuxue);
p->shuxue=shuxue;
break;
case0:
system("cls");
menu();
gotolab;
break;
default:
printf("对不起,输入有误!
");
break;
}
}
}
else
p=p->next;
}
lab:
fprint_(head);
printf("修改完成,并储存至文件!
\n");
returnhead;
}
/*主函数*/
voidmain()
{
intchoice,ch;
charm[15];
structstudents*head=NULL;
menu();
while
(1)
{
printf("请输入选项:
");
scanf("%d",&choice);
switch(choice)
{
case1:
Input();break;
case2:
system("cls");
menu();
Xianshi(head);break;
case3:
system("cls");
menu();
FindofNum(head);
break;
case4:
system("cls");
menu();
FindofName(head);
break;
case5:
system("cls");
menu();
Insert(head);
break;
case6:
system("cls");
menu();
Xiugai();
break;
case7:
system("cls");
menu();
head=Delete(head);
break;
case0:
system("cls");
printf("\t\t欢迎下次再来!
");