学生成绩信息管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目:学生成绩信息管理系统
用c语言实现学生管理系统,每个学生的信息包括:学号、姓名、性别、平时成绩、期末成绩。
系统能够完成学生信息的查询、更新、插入、删除、排序功能。
1、系统以菜单方式工作;
2、学生信息录入功能(学生信息用文件保存)--输入;
3、学生信息按条件查询功能—算法;
●按学号查询
●按姓名查询
●按性别查询
●按平时成绩查询
●按期末成绩查询
4、学生信息的删除与修改。
流程图:
图1 函数功能模块图
输入输出的要求
(1)等候用户输入时,给出足够的提示信息,如:选择1,输入学生信息、选择2,查询学生信息。
(2)对输入值的类型,大小范围,字符串长度等,进行检查,对不合法的输入值给出出错信息。
(3)对删除数据给出方式,让用户进行确认删除。
1.概要设计
1.抽象数据类型定义
struct Student//创建结构体
{
…………
…………
…………
};
2.系统功能模块划分与设计(系统功能模块图)
录入学生信息模块:
输入1,判断学生信息是否存在,不存在输入1,继续上次输入,判断学生信息是否存在,运行结束。
输入2,判断学生信息是否存在,不存在输入2,清除数据重新输入,运行结束。
查询学生信息模块:查询学生信息,请输入选择查询方式。
输入1,按姓名查找学生信息
输入2,按学号查找学生信息
输入3,按性别查找学生信息
输入4,按平时成绩查找学生信息
输入5,按期末成绩查找学生信息
运行结束
删除学生信息模块:首先使用查询功能查询出需要修改/删除的记录,然后进行修改/删除操作无学生信息!请选项删除方式。
输入1,按照姓名删除
输入2,按照学号删除
运行结束
修改,输出,排序学生信息
输入4,修改学生信息,请输入需要修改的学生信息
输入5,按姓名,成绩,平时成绩,期末成绩输出学生成绩。
输入6,将学生信息进行排序。
运行结束
2.详细设计
1、数据类型的定义
struct Student//创建结构体
{
char num[20]; //学号
char name[20]; //姓名
char sex[5]; //性别
int score; //平时成绩
int QiMoscore; //期末成绩
struct Student *next; //动态链表连接下一个结构体
};
2、主要模块的算法描述
菜单模块
通过while语句
给出信息提示;
清屏;
绘制菜单(包含输入,查询,删除,修改,输出,排序);
提示菜单选择并读入到变量;
根据读入变量的值调用不同的模块函数;
信息录入模块
打开文件
While()
{ 清屏;
按照提示输入各种信息;
While
显示各种信息;
通过选择1.确认并继续 2.填写 3.修改 4.确认并返回选择四种功能;
}
}
信息查询
While()
{ 通过菜单式的选择是学号查询还是姓名
printf("\n----------请选择查询方式----------");
printf("\n 1.按姓名查询");
printf("\n 2.按学号查询");
printf("\n 3.按性别查询");
printf("\n 4.按平时成绩查询");
printf("\n 2.按期末成绩查询");
printf("\n 3.返回主菜单");
printf("\n****************************\n");
}
如果选择学号进入学号模块
通过输入学号
If(学号存在继续)
{输出学生信息
}
Else 输出无此学生
如果选择姓名进入姓名模块
If(根据比较姓名判断学生是否存在)
{输出学生信息
}
Else 输出无此学生
删除模块
while( 继续删除 )
{
提示并读入待删除的学生的学生号;
显示要删除的信息
}
删除成功
信息修改模块
输入要修改学生信息的学号:
If (判断是否有此学生)
{ 菜单形式显示要修改的项目
printf("\n1.姓名 2.学号 3.性别 4.平时成绩 5. 期末成绩 \n");
printf("\n输入0可返回主页面 \n");
}
打开文件模块
struct Student *read()
{
struct Student *p0, *p1, *head; FILE *fp;
if ( )
{
return NULL;
}
if ( )
{
return 0;
}
do
{
if ( )
{
return NULL;
}
if ( )
{
return 0;
}
} while ( );
}
排序模块
int paixu(struct Student *head)
while()
{
while()
{
if()
{
}
}
}
}
}
3.使用说明及编程体会
使用说明
该程序可以实现学生管理系统的信息排序、查询、更新、插入和删除。
首先安装CodeBcks软件,选择“Create a new project”,在弹出来的窗口选择第四个,点击“G”。
接着选“C”,点击“Next工程的信息,点击“Next”,再点击“finish”。
然后在工具栏“File”中单击“New”选项,再点击“File”,选择第二个,点击“Go”,点击“Next”。
选择“C”,点击“Next”,输入路径,点击“Finish”,至此,C语言工程已经创建完毕。
将文件中的代码复制粘贴进工程,先静态检查一下有没有语法错误,然后进行编译,更深一步检查语法错误。
待编译通过时,运行程序,观察是否能够正常运行。
本系统主要是为了帮助学校更方便管理学生信息而设计的。
学生信息包括:学号、姓名、性别、平时成绩、期末成绩。
学号不可重复,要求格式一致。
姓名考虑重名的情况,可以重复。
性别只有男女两项。
点击排序,可以按照不同的关键字,对所有学生的信息进行排序,如期末成绩从高到底排序。
点击查询,可以按照指定条件查找学生,如学号、姓名等。
点击更新,可以按照学号对某个学生的一项或者多项信息进行修改。
点击插入,可以加入新学生的各项信息。
点击删除,可以按学号删除某个学生的信息。
编程体会
通过这次课程设计,我们小组按照要求合作完成了学生管理系统。
虽然已经学习了一学期的《数据结构》,但是我们这样完整地做一个系统还是头一次。
这项课程设计对我们还是有难度的,我们翻阅课本、查找资料,多次尝试、多次修改,最后才完成了作业。
在这个过程中,我们不仅巩固了上课学习的知识,尤其是链表、排序和查找,还加深了我们对于课本知识的了解。
拿到这个课程的题目,我们首先对这个系统的功能进行了构思,将各部分分配到每个人的头上。
在编写过程中,我们用到了相当多的链表。
“链表的建立是一种动态生成的存储结构,链表中的每个结点占用的存储空间不是预先分配的,而是运行时用户根据需求向系统申请而生成的。
”这个链表的定义就是我们选择这种线性表的原因。
又实用了多种排序方式,很多用到了起泡排序。
C语言是计算机程序设计的重要理论基础,这个语言将在未来很长的一段时间里,跟我们的学习生活工作紧紧结合。
这就需要我们不仅要熟悉理论知识,还有拥有较强的实践能力。
在这次课程设计中,我们就通过动手,发现了很多理论上容易被忽视的细节,但是这些细节如果在实践中标真的忽视掉,程序将会出现很大的问题,我们在编程过程中对此体会很深。
使用这个系统学生信息,不仅检索迅速、查找方便,更大大提高了提高学生档案管理的效率。
未来我们将学到更多知识,我们将会作出比现在这个简易系统使用更简单、更美观、效率也更高的系统。
4.关键源程序(带注释)
//学生管理系统
//每个学生的信息包括:学号、姓名、性别、平时成绩、期末成绩。
系统能够完成学生信息的查询、更新、插入、删除、排序功能。
//基本要求:
//(1)排序:按不同关键字,对所有学生的信息进行排序;
//(2)查询:按特定条件查找学生;
//(3)更新:按学号对某个员工的某项信息进行修改;
//(4)插入:加入新学生的信息;
//(5)删除:按学号删除某位学生信息。
//选作内容:实现图形用户界面。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Student//创建结构体
{
char num[20]; //学号
char name[20]; //姓名
char sex[5]; //性别
int score; //平时成绩
int QiMoscore; //期末成绩
struct Student *next; //动态链表连接下一个结构体
};
struct Student *creat(struct Student *head0)
{
struct Student *head1, *p1, *p2, *t0, *t1;//定义指针实现两种输入方式 int m, n = 1, h; //m判断是否继续输入 n是记录输入的学生数 h是选择输入的方式
//FILE *fp;
printf("请选择:");
printf("\n\n注意:首次输入请输入2\n\n");
printf("1.继续上次输入: 2.清除数据并重新输入:");
scanf("%d",&h);
if (h==1)
{
if(head0 == NULL)
{
printf("\n\n上次无学生输入!!!\n");
return NULL;
}
t0 = head0;
while (t0 != NULL)
{
t1 = t0;
t0 = t0->next;
}
p1 = p2 = (struct Student*)malloc(1 * sizeof(struct Student)); if (p1 == NULL)
{
printf("内存开辟失败!\n");
return 0;
}
t1->next = p2;
printf("请输入学生学号:");
scanf("%s", p2->num);
printf("请输入学生姓名:");
scanf("%s", p2->name);
printf("请输入学生性别:");
scanf("%s", p2->sex);
printf("请输入学生平时成绩:");
scanf("%d", &p2->score);
printf("请输入学生期末成绩:");
scanf("%d", &p2->QiMoscore);
printf("\n结束请输入 '0' 继续请输入 '1' :");
scanf("%d", &m);
while (m != 0)
{
printf("--------------------------已输入了 %d 名学生的信息-----------------------\n", n);
printf("\n");
printf("\n");
n = n + 1;
p1 = (struct Student*)malloc(1 * sizeof(struct Student)); if (p1 == NULL)
{
printf("内存开辟失败!\n");
return 0;
}
p2->next = p1;
p2 = p1;
printf("请输入学生学号:");
scanf("%s", (*p1).num);
printf("请输入学生姓名:");
scanf("%s", p1->name);
printf("请输入学生性别:");
scanf("%s", p1->sex);
printf("请输入学生平时成绩:");
scanf("%d", &p1->score);
printf("请输入学生期末成绩:");
scanf("%d", &p1->QiMoscore);
printf("\n结束请输入 '0' 继续请输入 '1' :");
scanf("%d", &m);
}
p1->next = NULL;
printf("--------------------------共输入了 %d 名学生的信息-----------------------\n", n);
printf("\n");
printf("\n");
return(head0);
}
if (h==2)
{
head1 = p1 = p2 = (struct Student*)malloc(1 * sizeof(struct Student)); if (p1 == NULL)
{
printf("内存开辟失败!\n");
return 0;
}
printf("请输入学生学号:");
scanf("%s", p1->num);
printf("请输入学生姓名:");
scanf("%s", p1->name);
printf("请输入学生性别:");
scanf("%s", p1->sex);
printf("请输入学生平时成绩:");
scanf("%d", &p1->score);
printf("请输入学生期末成绩:");
scanf("%d", &p1->QiMoscore);
printf("\n结束请输入 '0' 继续请输入 '1' :"); //判断是否继续输入的标准
scanf("%d", &m);
while (m != 0)
{
printf("--------------------------已输入了 %d 名学生的信息-----------------------\n", n);
printf("\n");
printf("\n");
n = n + 1;
p1 = (struct Student*)malloc(1 * sizeof(struct Student));
if (p1 == NULL)
{
printf("内存开辟失败!\n");
return 0;
}
p2->next = p1;
p2 = p1;
printf("请输入学生学号:");
scanf("%s", (*p1).num);
printf("请输入学生姓名:");
scanf("%s", p1->name);
printf("请输入学生性别:");
scanf("%s", p1->sex);
printf("请输入学生平时成绩:");
scanf("%d", &p1->score);
printf("请输入学生期末成绩:");
scanf("%d", &p1->QiMoscore);
printf("\n结束请输入 '0' 继续请输入 '1' :");
scanf("%d", &m);
}
p2->next = NULL; //使链表最后一位的next指向为空
printf("--------------------------共输入了 %d 名学生的信息-----------------------\n", n);
printf("\n");
printf("\n");
head0 = head1;
return(head0); // 返回头
}
}
int cha(struct Student *head)//查询学生的信息
{
struct Student *p1,*p2,*p3,*p4,*p5;
char x1[20],x2[20],x3[20];
int x4,x5;
p1=p2=p3=p4=p5=head;
int m1=0,m2=0,m3=0,m4=0,m5=0;
int f;
if(head==NULL)
{
printf("\n无学生信息!\n");
printf("\n输入0可返回主界面\n");
int n;
scanf("%d",&n);
if(n==0)
{
return 0;
}
}
printf("请选择查询方式:\n1:按姓名查找\n2:按学号查找\n3:按性别查找\n4:按平时成绩查找\n5:按期末成绩查找\n");
scanf("%d",&f);
if(f==1)
{
if(p1==NULL)
{
printf("无学生信息!\n");
}
printf("请输入姓名:");
scanf("%s",x1);
while(p1!=NULL)
{
if(strcmp(p1->name,x1)==0)
{
printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");
printf("%s\t%s\t%s\t%d\t\t%d\t",p1->num,p1->name,p1->sex,p1->score,p1->Q iMoscore);
m1++;
}
else
p1=p1->next;
if(m1==1)
{
break;
}
}
if(m1==0)
{
printf("无此学生的信息!\n");
}
printf("\n输入6可返回主界面\n");
scanf("%d",&f);
if(f==6)
{
return 0;
}
}
if(f==2)
{
if(p2==NULL)
{
printf("无学生信息!\n");
}
printf("请输入学号:");
scanf("%s",x2);
while(p2!=NULL)
{
if(strcmp(p2->num,x2)==0)
{
printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");
printf("%s\t%s\t%s\t%d\t\t%d\t",p2->num,p2->name,p2->sex,p2->score,p2->Q iMoscore);
m2++;
}
else
p2=p2->next;
if(m2==1)
{
break;
}
}
if(m2==0)
{
printf("无此学生的信息!\n");
}
printf("\n输入6可返回主界面\n");
scanf("%d",&f);
if(f==6)
{
return 0;
}
}
if(f==3)
{
if(p3==NULL)
{
printf("无学生信息!\n");
}
printf("请输入性别:");
scanf("%s",x3);
while(p3!=NULL)
{
if(strcmp(p3->sex,x3)==0)
{
printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");
printf("%s\t%s\t%s\t%d\t\t%d\t",p3->num,p3->name,p3->sex,p3->score,p3->Q iMoscore);
m3++;
}
else
p3=p3->next;
if(m3==1)
{
break;
}
if(m3==0)
{
printf("无此学生的信息!\n");
}
printf("\n输入6可返回主界面\n");
scanf("%d",&f);
if(f==6)
{
return 0;
}
}
if(f==4)
{
if(p4==NULL)
{
printf("无学生信息!\n");
}
printf("请输入平时成绩:");
scanf("%d",x4);
while(p4!=NULL)
{
if(p4->score==x4)
{
printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");
printf("%s\t%s\t%s\t%d\t\t%d\t",p4->num,p4->name,p4->sex,p4->score,p4->Q iMoscore);
m4++;
}
else
p4=p4->next;
if(m4==1)
{
break;
}
}
if(m4==0)
{
printf("无此学生的信息!\n");
}
printf("\n输入6可返回主界面\n");
scanf("%d",&f);
if(f==6)
return 0;
}
}
if(f==5)
{
if(p5==NULL)
{
printf("无学生信息!\n");
}
printf("请输入期末成绩:");
scanf("%s",x5);
while(p5!=NULL)
{
if(p5->QiMoscore==x5)
{
printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");
printf("%s\t%s\t%s\t%d\t\t%d\t",p5->num,p5->name,p5->sex,p5->score,p5->Q iMoscore);
m5++;
}
else
p5=p5->next;
if(m5==1)
{
break;
}
}
if(m5==0)
{
printf("无此学生的信息!\n");
}
printf("\n输入6可返回主界面\n");
scanf("%d",&f);
if(f==6)
{
return 0;
}
}
}
int paixu(struct Student *head)//排序,将数据大的数据依次往后存
{
struct Student *p2;
struct Student *p;
struct Student *p1;
//p2 = (struct Student*)malloc(1 * sizeof(struct Student));
//p1 = (struct Student*)malloc(1 * sizeof(struct Student));
p=head;
p1=NULL;
if(head==NULL)
{
printf("\n无学生信息!\n");
printf("\n输入0可返回主界面\n");
int n;
scanf("%d",&n);
if(n==0)
{
return 0;
}
}
int l;
printf("请输入: \n1;以平时成绩排序 \n2:以期末成绩排序\n\n"); scanf("%d",&l);
printf("\n\n\n");
if(l==1)
{
while(p!=p1)
{
while(p->next!=p1)
{
if(p->score>p->next->score)
{
strcpy((p2->num),(p->num));
strcpy((p->num),(p->next->num));
strcpy((p->next->num),(p2->num));
strcpy((p2->name),(p->name));
strcpy((p->name),(p->next->name));
strcpy((p->next->name),p2->name);
strcpy((p2->sex),(p->sex));
strcpy((p->sex),(p->next->sex));
strcpy((p->next->sex),(p2->sex));
int a=p->score;
p->score=p->next->score;
p->next->score=a;
int b=p->QiMoscore;
p->QiMoscore=p->next->QiMoscore; p->next->QiMoscore=b;
}
p=p->next;
}
p1=p;
p=head;
}
}
if(l==2)
{
while(p!=p1)
{
while(p->next!=p1)
{
if(p->QiMoscore>p->next->QiMoscore)
{
strcpy((p2->num),(p->num));
strcpy((p->num),(p->next->num)); strcpy((p->next->num),(p2->num));
strcpy((p2->name),(p->name));
strcpy((p->name),(p->next->name)); strcpy((p->next->name),p2->name);
strcpy((p2->sex),(p->sex));
strcpy((p->sex),(p->next->sex)); strcpy((p->next->sex),(p2->sex));
int a=p->score;
p->score=p->next->score;
p->next->score=a;
int b=p->QiMoscore;
p->QiMoscore=p->next->QiMoscore; p->next->QiMoscore=b;
}
p=p->next;
}
p1=p;
p=head;
}
}
printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");
p=head;
while(p!=NULL)
{
printf("%s\t%s\t%s\t%d\t\t%d\t",p->num,p->name,p->sex,p->score,p->QiMosc ore);
printf("\n");
p=p->next;
}
printf("\n输入0可返回主界面\n");
scanf("%d",&n);
if(n==0)
{
return 0;
}
}
int shuchu(struct Student *head)//利用头指针将信息逐个输出
{
int n;
//int i,j;
struct Student *p;
p=head;
if(p==NULL)
{
printf("\n无学生信息!\n");
printf("\n输入0可返回主界面\n");
int n;
scanf("%d",&n);
if(n==0)
{
return 0;
}
}
printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");
p=head;
while(p!=NULL)
{
printf("%s\t%s\t%s\t%d\t\t%d\t",p->num,p->name,p->sex,p->score,p->QiMosc ore);
printf("\n");
p=p->next;
}
printf("\n输入0可返回主界面\n");
scanf("%d",&n);
if(n==0)
{
return 0;
}
}
struct Student *shan(struct Student *head)
{
struct Student *p1,*p2,*t1,*t2;
char x[20],y[20];
p1=p2=t1=t2=head;
if(head == NULL)
{
printf("\n无学生信息!\n");
printf("\n输入0可返回主界面\n");
int n;
scanf("%d",&n);
if(n==0)
{
return 0;
}
}
int f,n;
printf("请选择删除方式\n1:按照姓名删除\n2:按照学号删除\n");
scanf("%d",&f);
if(f==1)//姓名
{
int n;
//int i,j;
struct Student *p;
p=head;
if(p==NULL)
{
printf("失败!\n");
printf("\n输入0可返回主界面\n");
scanf("%d",&n);
if(n==0)
{
return 0;
}
}
printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");
p=head;
while(p!=NULL)
{
printf("%s\t%s\t%s\t%d\t\t%d\t",p->num,p->name,p->sex,p->score,p->QiMosc ore);
printf("\n");
p=p->next;
}
printf("\n\n");
printf("请输入姓名:\n");
scanf("%s",x);
while(strcmp(p1->name,x)!=0&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;//利用指针进行逐个检查
}
if(strcmp(p1->name,x)==0)
{
if(p1==head)//如果删除的是第一个学生,那么头指针不可能直接被切掉只要将头指针向后移动一个单元即可
{
head=p1->next;
printf("成功删除!\n");
}
else
{
p2->next=p1->next;//核心步骤
printf("成功删除!\n");
}
}
else
{
printf("无此学生!\n");
}
printf("\n输入0可返回主界面\n");
scanf("%d",&n);
return head;
}
else if(f==2)
{
int n;
//int i,j;
struct Student *p;
p=head;
if(p==NULL)
{
printf("失败!\n");
printf("\n输入0可返回主界面\n");
scanf("%d",&n);
if(n==0)
{
return 0;
}
}
printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");
p=head;
while(p!=NULL)
{
printf("%s\t%s\t%s\t%d\t\t%d\t",p->num,p->name,p->sex,p->score,p->QiMosc ore);
printf("\n");
p=p->next;
}
printf("/n/n");
printf("请输入学号:\n");
scanf("%s",y);
while(strcmp(t1->num,y)!=0&&t1->next!=NULL)
{
t2=t1;
t1=t1->next;
}
if(strcmp(t1->num,y)==0)
{
if(t1==head)
{
head=t1->next;
printf("成功删除!\n");
}
else
{
t2->next=t1->next;
printf("成功删除!\n");
}
}
else
{
printf("无此学生!\n");
}
printf("\n输入0可返回主界面\n");
scanf("%d",&n);
return head;
}
}
struct Student *xiu(struct Student *head)
{
int n;
//int i,j;
struct Student *p;
p=head;
if(p==NULL)
{
printf("\n无学生信息!\n");
printf("\n输入0可返回主界面\n");
int n;
scanf("%d",&n);
if(n==0)
{
return 0;
}
}
printf("学号\t姓名\t性别\t平时成绩\t期末成绩\t\n");
p=head;
while(p!=NULL)
{
printf("%s\t%s\t%s\t%d\t\t%d\t",p->num,p->name,p->sex,p->score,p->QiMosc ore);
printf("\n");
p=p->next;
}
struct Student *p1,*p2;
char x[20];
if(head==NULL)
{
printf("无学生信息!\n");
}
p1=p2=head;
printf("\n请输入要修改人的姓名:");
scanf("%s",x);
while(strcmp(x,p1->name)!=0&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(strcmp(x,p1->name)==0)
{
printf("请填写修改后的信息!\n");
printf("请输入学生学号:");
scanf("%s", p1->num);
printf("请输入学生姓名:");
scanf("%s", p1->name);
printf("请输入学生性别:");
scanf("%s", p1->sex);
printf("请输入学生平时成绩:");
scanf("%d", &p1->score);
printf("请输入学生期末成绩:");
scanf("%d", &p1->QiMoscore);
}
printf("\n修改成功!\n");
printf("\n输入0可返回主界面\n");
scanf("%d",&n);
return head;
}
void write(struct Student *p0) //写入文件
{
int m = 0, n = 0;
// printf("\n本次无新学生信息存储!!!\n");
FILE *fp;
if(p0 == NULL)
{
printf("\n\n\n存储信息为空!!!\n");
if ((fp = fopen("stu.dat", "wb+")) == NULL) {
printf("\n\n\n删除存储文件失败!!!\n");
exit(0);
}
return;
}
if ((fp = fopen("stu.dat", "wb+")) == NULL)
{
printf("\n\n\n文件打开失败!!!\n");
return;
}
do
{
if ((fwrite(p0, sizeof(struct Student), 1, fp) != 1)) printf("\n\n\n文件写入失败!!!\n");
else n++;
p0 = p0->next;
m++;
} while (p0 != NULL );
printf("\n\n\n应写入%d名学生信息,已写入%d名学生的信息!!!\n", m, n); fclose(fp);
}
struct Student *read() // 读取链表
{
// printf("\n本次读取学生信息!!!\n");
struct Student *p0, *p1, *head;
FILE *fp;
if ((fp = fopen("stu.dat", "rb+")) == NULL)
{
printf("\n\n\n文件打开失败!!!\n");
return NULL;
}
rewind(fp);
head = p0 = p1 = (struct Student*)malloc(1 * sizeof(struct Student)); if (p1 == NULL)
{
printf("\n内存开辟失败!\n");
return 0;
}
do
{
//p0=p2->next;
p1->next = p0;
p1 = p0;
if ((fread(p1, sizeof(struct Student), 1, fp) != 1))
{
printf("\n\n\n文件为空,请先存入信息再读取!!!\n\n\n");
return NULL;
}
p0 = (struct Student*)malloc(1 * sizeof(struct Student));
if (p0 == NULL)
{
printf("\n内存开辟失败!\n");
return 0;
}
} while (p1->next != NULL );
p1->next = NULL;
free(p0);
fclose(fp);
return head;
}
int choose(struct Student *p1) //功能菜单选择
{
struct Student *head;
int i;
p1 = NULL;
head = NULL;
printf("
\t\t\t***********************************\n");
printf(" \n"); printf(" \t\t\t 学生信息管理系统 \n"); printf(" \n"); printf("
\t\t\t***********************************\n");
printf(" \t\t\t\t 1 输入学生信息\n");
printf(" \t\t\t\t 2 查询学生信息\n");
printf(" \t\t\t\t 3 删除学生信息\n");
printf(" \t\t\t\t 4 修改学生信息\n");
printf(" \t\t\t\t 5 输出学生信息\n");
printf(" \t\t\t\t 6 排序学生信息\n");
printf("\n");
printf("\n\t\t\t \t\t 请输入所选择的操作:");
scanf("%d", &i);
switch (i)
{
//只要有关于改动学生信息的操作都要经过write函数重新写入文件!! case 1:system("cls");
head = read();
head = creat(head);
write(head);
system("cls");
break;
case 2:
system("cls");
head = read();
cha(head);
system("cls");
break;
case 3:system("cls");
head = read();
head = shan(head); write(head);
system("cls");
break;
case 4:system("cls");
head = read();
//all(head);
head = xiu(head); write(head);
system("cls");
break;
case 5:system("cls");
head = read();
shuchu(head);
system("cls");
break;
case 6:system("cls");
head = read();
paixu(head);
system("cls");
break;
break;
}
return 1;
}
int main()
{
struct Student *p1 = NULL; while(choose(p1))//一直调用 {
}
return 0; }。