学生信息管理系统C语言基于链表文件.docx
《学生信息管理系统C语言基于链表文件.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统C语言基于链表文件.docx(17页珍藏版)》请在冰豆网上搜索。
![学生信息管理系统C语言基于链表文件.docx](https://file1.bdocx.com/fileroot1/2022-11/24/00041895-5f27-47ea-8211-065917697e61/00041895-5f27-47ea-8211-065917697e611.gif)
学生信息管理系统C语言基于链表文件
#include
#include
#include
#include
#include
#defineLENsizeof(structstudent)
#defineDAT_FILENAME"Information.txt"
/**********************定义数据结构********************/
structdate
{
intyear;
intmonth;
intday;
};
structstudent
{
intID;
charName[8];
intage;
charxb;
chartelephone[15];
charaddress[40];
structdatebirthday;
charemail[40];
structstudent*next;
};
/*************************函数原型*********************/
voidDispMainMenu();
voidDisplayInformation(structstudent*head);
structstudent*FindstudentID(structstudent*head,intfindID);
structstudent*FindstudentName(structstudent*head,charfindname[]);
structstudent*InformationInput(structstudent*head);
voidQueryInformation(structstudent*head);
structstudent*EditInformation(structstudent*head);
structstudent*Insert(structstudent*head,structstudent*p);
voidSave(structstudent*head);
structstudent*Read(structstudent*head);
structstudent*Delete(structstudent*head,intfindID);
structstudent*Add(structstudent*head);
voidHelp();
/************************显示主菜单***************************/
voidDispMainMenu()
{
printf("*********************************学生信息管理系统******************************\n");
printf("\n");
printf("\t\t\t\t1--信息录入\n");
printf("\n");
printf("\t\t\t\t2--信息修改\n");
printf("\n");
printf("\t\t\t\t3--信息查询\n");
printf("\n");
printf("\t\t\t\t4--保存数据到文件\n");
printf("\n");
printf("\t\t\t\t5--打开数据文件\n");
printf("\n");
printf("\t\t\t\t6--文件追加\n");
printf("\n");
printf("\t\t\t\t7--帮助\n");
printf("\n");
printf("\t\t\t\t0--退出\n");
printf("\n");
printf("友情提示:
初次使用请先阅读帮助\n");
printf("*******************************************************************************\n");
printf("请选择(0-7):
");/*显示主菜单*/
}
/*************************************帮助**************************************************/
voidHelp()
{
printf("\n\t\t\t欢迎进入帮助系统!
\n\n");
printf("\t1.请按照主菜单提示选择所需执行功能的数字代号!
\n");
printf("\t2.所有文件请按照规范输入\n");
printf("\t3.刚开始执行程序时若需要文本文件里的数据,请先进行读取文件信息!
\n");
printf("\t4.修改信息以后,请切记需要保存!
\n");
printf("\n");
}
/***********************显示所有学生信息**********************/
voidDisplayInformation(structstudent*head)
{
structstudent*p;
printf("*******************************************************************************");
printf("\n学号\t姓名\t年龄\t性别\t电话\t\t地址\t出生年月\temail\n");
p=(structstudent*)malloc(LEN);
p=head;
if(head!
=NULL)
while(p!
=NULL)
{
printf("%-d\t%-s\t%-d\t",p->ID,p->Name,p->age);
printf("%-c\t%-s\t%-s\t",p->xb,p->telephone,p->address);
printf("%-d%d%d",p->birthday.year,p->birthday.month,p->birthday.day);
printf("\t%-s\n",p->email);
p=p->next;
}
else
printf("无数据\n");
}
/**************************查找指定学号的学生信息******************************/
structstudent*FindstudentID(structstudent*head,intfindID)
{
structstudent*p;
p=(structstudent*)malloc(LEN);
p=head;
if(head!
=NULL)
while(p!
=NULL)
{
if(p->ID==findID)
break;
p=p->next;
}
else
printf("无数据\n");
returnp;
}
/***************************查找指定姓名的学生信息**********************/
structstudent*FindstudentName(structstudent*head,charfindname[])
{
structstudent*p;
p=(structstudent*)malloc(LEN);
p=head;
if(head!
=NULL)
while(p!
=NULL)
{
if(strcmp(p->Name,findname)==0)
break;
p=p->next;
}
else
printf("无数据\n");
returnp;
}
/********************学生信息录入**********************************/
structstudent*InformationInput(structstudent*head)
{
intnumber,i;
structstudent*p;
p=(structstudent*)malloc(LEN);
printf("\n请输入本次录入的学生人数:
");
scanf("%d",&number);
for(i=0;i{
printf("请输入第%d个学生的学号(八个字符以内):
",i+1);
scanf("%d",&p->ID);
printf("\t\t\t姓名:
\t");
scanf("%s",p->Name);
printf("\t\t\t年龄:
\t");
scanf("%d",&p->age);
printf("\t\t\t性别(男M、女W):
");
scanf("%s",&p->xb);
printf("\t\t\t电话(八位):
\t");
scanf("%s",p->telephone);
printf("\t\t\t地址:
\t");
scanf("%s",p->address);
printf("\t\t\t出生年月:
\t");
scanf("%d%d%d",&p->birthday.year,&p->birthday.month,&p->birthday.day);
printf("\t\t\temail:
\t");
scanf("%s",p->email);
head=Insert(head,p);
p=(structstudent*)malloc(LEN);
}
printf("\n您的输入信息是:
\n");
DisplayInformation(head);
return(head);
}
/**************************学生信息查询*************************/
voidQueryInformation(structstudent*head)
{
charselect;
intfindID;
charfindname[8];
structstudent*p;
printf("*********************请选择查询方式*************************\n");
printf("\t1--按学号查询;\t2--按姓名查询\n");
printf("************************************************************\n");
printf("请选择(1-2):
");/*显示菜单信息*/
select=getche();
getch();
switch(select)
{
case'1':
printf("\n按学号查询\n请输入学生的学号:
");
scanf("%d",&findID);
if((p=FindstudentID(head,findID))!
=NULL)/*找到指定学号的学生*/
{
printf("\n查找结果如下:
\n");
printf("\n学号\t姓名\t年龄\t性别\t电话\t\t地址\t出生年月\temail\n");
printf("%d\t%s\t%d\t",p->ID,p->Name,p->age);
printf("%c\t%s\t%s\t",p->xb,p->telephone,p->address);
printf("%d%d%d",p->birthday.year,p->birthday.month,p->birthday.day);
printf("\t%s\n",p->email);
}
else/*没有找到*/
printf("您输入的学号不存在!
\n");
break;
case'2':
printf("\n按姓名查询\n请输入学生的姓名:
");
scanf("%s",&findname);
if((p=FindstudentName(head,findname))!
=NULL)/*找到指定姓名的学生*/
{
printf("\n查找结果如下:
\n");
printf("\n学号\t姓名\t年龄\t性别\t电话\t地址\t出生年月\temail\n");
printf("%d\t%s\t%d\t",p->ID,p->Name,p->age);
printf("%c\t%s\t%s\t",p->xb,p->telephone,p->address);
printf("%d%d%d",p->birthday.year,p->birthday.month,p->birthday.day);
printf("\t%s\n",p->email);
}
else/*没有找到*/
printf("您输入的姓名不存在!
\n");
break;
default:
printf("选择错误!
\n");
}
}
/*********************************修改学生信息***********************/
structstudent*EditInformation(structstudent*head)
{
intfindID;
charselect;
structstudent*p;
printf("\n请输入学生的学号:
");
scanf("%d",&findID);
if((p=FindstudentID(head,findID))!
=NULL)/*找到指定学号的学生*/
{
printf("*********************请修改方式*************************\n");
printf("\t1--修改信息;\t2--删除信息\n");
printf("************************************************************\n");
printf("请选择(1-2):
");
select=getche();
getch();
switch(select)
{
case'1':
/*修改信息*/
printf("您选择的是修改信息!
\n");
printf("姓名:
%s\n",p->Name);
printf("原信息:
学号:
%d\t年龄:
%d\t性别:
%c\n",p->ID,p->age,p->xb);
printf("\t电话:
%s\t地址:
%s\temail:
%s\n",p->telephone,p->address,p->email);
printf("请输入新信息\n");
printf("学号\t");
scanf("%d",&p->ID);
printf("姓名:
\t");
scanf("%s",p->Name);
printf("年龄:
\t");
scanf("%d",&p->age);
printf("性别(男M、女W):
");
scanf("%s",&p->xb);
printf("电话:
\t");
scanf("%s",p->telephone);
printf("地址:
\t");
scanf("%s",p->address);
printf("出生年月:
\t");
scanf("%d%d%d",&p->birthday.year,&p->birthday.month,&p->birthday.day);
printf("email:
\t");
scanf("%s",p->email);
break;
case'2':
/*删除信息*/
printf("您选择的是删除信息!
\n");
head=Delete(head,findID);
break;
}
}
else/*没有找到学号匹配的记录*/
printf("您输入的学号不存在!
\n");
return(head);
}
/**************************有序插入***************************************/
structstudent*Insert(structstudent*head,structstudent*p)
{
structstudent*p0,*p1;
if(head==NULL)
{
head=p;
p->next=NULL;
return(head);
}
if(p->IDID)
{
p->next=head;
head=p;
return(head);
}
p1=head;
while((p->ID>p1->ID)&&(p1->next!
=NULL))
{
p0=p1;
p1=p1->next;
}
if(p->IDID)
{
p->next=p1;
p0->next=p;
}
else
{
if(p->ID==p1->ID)
;
else
{
p1->next=p;
p->next=NULL;
}
}
return(head);
}
/*******************************保存数据到文件**************************/
voidSave(structstudent*head)
{
FILE*fp;
structstudent*p;
p=head;
if((fp=fopen(DAT_FILENAME,"w+"))!
=NULL)/*以W+的方式打开文件*/
{
while(p!
=NULL)
{
fprintf(fp,"%d\t",p->ID);
fprintf(fp,"%s\t",p->Name);
fprintf(fp,"%d\t",p->age);
fprintf(fp,"%c\t",p->xb);
fprintf(fp,"%s\t",p->telephone);
fprintf(fp,"%s\t",p->address);
fprintf(fp,"%d%d%d\t",p->birthday.year,p->birthday.month,p->birthday.day);
fprintf(fp,"%s\n",p->email);
p=p->next;
}
/*将链表的内容写入文件*/
fclose(fp);
}
else
printf("cannotopenfile\n");
}
/***************************打开数据文件************************/
structstudent*Read(structstudent*head)
{
structstudent*p;
p=(structstudent*)malloc(LEN);
FILE*fp;
if((fp=fopen(DAT_FILENAME,"r"))!
=NULL)
{
/*读取文件中的内容到链表中*/
while(fscanf(fp,"%d\t",&p->ID)!
=EOF)
{
fscanf(fp,"%s\t",p->Name);
fscanf(fp,"%d\t",&p->age);
fscanf(fp,"%c\t",&p->xb);
fscanf(fp,"%s\t",p->telephone);
fscanf(fp,"%s\t",p->address);
fscanf(fp,"%d%d%d\t",&p->birthday.year,&p->birthday.month,&p->birthday.day);
fscanf(fp,"%s\n",p->email);
head=Insert(head,p);
p=(structstudent*)malloc(LEN);
}
fclose(fp);
}
else
printf("cannotopenfile\n");
returnhead;
}
/**************************文件内容追加************************/
structstudent*Add(structstudent*head)
{
head=Read(head);
head=InformationInput(head);
return(head);
}
/**************************删除信息****************************/
structstudent*Delete(structstudent*head,intfindID)
{
structstudent*pre,*p;
if(head->ID==findID)
{
p=head;
head=head->next;
}
else
{
pre=head;
p=pre->next;
while(p!
=NULL&&p->ID!
=findID)
{
pre=p;
p=p->next;
}
if(p->ID==findID)
pre->next=p->next;
}
free(p);
return(head);
}