资源描述
#include〈stdio.h>
#include<stdlib。h〉
#include〈conio。h〉
#include〈windows。h〉
#include〈string。h>
#define LEN sizeof(struct student)
#define DAT_FILENAME ”Information。txt”
/**********************定义数据结构********************/
struct date
{
int year;
int month;
int day;
};
struct student
{
int ID;
char Name[8];
int age;
char xb;
char telephone[15];
char address[40];
struct date birthday;
char email[40];
struct student *next;
};
/*************************函数原型*********************/
void DispMainMenu();
void DisplayInformation(struct student *head);
struct student *FindstudentID(struct student *head,int findID);
struct student *FindstudentName(struct student *head,char findname[]);
struct student *InformationInput(struct student *head);
void QueryInformation(struct student *head);
struct student *EditInformation(struct student *head);
struct student *Insert(struct student *head,struct student *p);
void Save(struct student *head);
struct student *Read(struct student *head);
struct student *Delete(struct student *head,int findID);
struct student *Add(struct student *head);
void Help();
/************************显示主菜单***************************/
void DispMainMenu()
{
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):”);/*显示主菜单*/
}
/*************************************帮助**************************************************/
void Help()
{
printf("\n\t\t\t欢迎进入帮助系统!\n\n”);
printf("\t1。请按照主菜单提示选择所需执行功能的数字代号!\n”);
printf("\t2.所有文件请按照规范输入\n");
printf("\t3.刚开始执行程序时若需要文本文件里的数据,请先进行读取文件信息!\n");
printf(”\t4。修改信息以后,请切记需要保存!\n”);
printf(”\n");
}
/***********************显示所有学生信息**********************/
void DisplayInformation(struct student *head)
{
struct student *p;
printf(”*******************************************************************************”);
printf(”\n学号\t姓名\t年龄\t性别\t 电话\t\t地址\t 出生年月\t email\n");
p=(struct student *)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");
}
/**************************查找指定学号的学生信息******************************/
struct student *FindstudentID(struct student *head,int findID)
{
struct student *p;
p=(struct student *)malloc(LEN);
p=head;
if(head!=NULL)
while(p!=NULL)
{
if(p-〉ID==findID)
break;
p=p->next;
}
else
printf("无数据\n”);
return p;
}
/***************************查找指定姓名的学生信息**********************/
struct student *FindstudentName(struct student *head,char findname[])
{
struct student *p;
p=(struct student *)malloc(LEN);
p=head;
if(head!=NULL)
while(p!=NULL)
{
if(strcmp(p—〉Name,findname)==0)
break;
p=p->next;
}
else
printf(”无数据\n");
return p;
}
/********************学生信息录入**********************************/
struct student *InformationInput(struct student *head)
{
int number,i;
struct student *p;
p=(struct student *)malloc(LEN);
printf(”\n请输入本次录入的学生人数:");
scanf("%d”,&number);
for(i=0;i〈number;i++)/*输入 number 个学生的信息*/
{
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=(struct student *)malloc(LEN);
}
printf("\n 您的输入信息是:\n”);
DisplayInformation(head);
return(head);
}
/**************************学生信息查询*************************/
void QueryInformation(struct student *head)
{
char select;
int findID;
char findname[8];
struct student *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 出生年月\t email\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 出生年月\t email\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");
}
}
/*********************************修改学生信息***********************/
struct student *EditInformation(struct student *head)
{
int findID;
char select;
struct student *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);
}
/**************************有序插入***************************************/
struct student *Insert(struct student *head,struct student *p)
{
struct student *p0,*p1;
if(head==NULL)
{
head=p;
p->next=NULL;
return(head);
}
if(p-〉ID〈head—〉ID)
{
p->next=head;
head=p;
return(head);
}
p1=head;
while((p—〉ID>p1—>ID)&&(p1—〉next!=NULL))
{
p0=p1;
p1=p1—〉next;
}
if(p-〉ID〈p1—〉ID)
{
p—>next=p1;
p0-〉next=p;
}
else
{
if(p->ID==p1—>ID)
;
else
{
p1—〉next=p;
p—〉next=NULL;
}
}
return(head);
}
/*******************************保存数据到文件**************************/
void Save(struct student *head)
{
FILE *fp;
struct student *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(”cannot open file\n”);
}
/***************************打开数据文件************************/
struct student *Read(struct student *head)
{
struct student *p;
p=(struct student *)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=(struct student *)malloc(LEN);
}
fclose(fp);
}
else
printf(”cannot open file\n");
return head;
}
/**************************文件内容追加************************/
struct student *Add(struct student *head)
{
head=Read(head);
head=InformationInput(head);
return (head);
}
/**************************删除信息****************************/
struct student *Delete(struct student *head,int findID)
{
struct student *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);
}
/*********************************主函数***************************/
void main()
{
char select,c;
struct student *head;
head=NULL;
select=0;
while(select!=’0')
{
DispMainMenu();
select=getche();
getch();
switch(select)
{
case'0’:
printf(”\n您选择的是退出!\n");
_beep(300,400);
continue;
case’1':
system(”cls”);
printf("\n您选择的是信息录入!\n”);
head=InformationInput(head);
break;
case’2’:
system("cls”);
printf("\n您选择的是信息修改!\n”);
head=EditInformation(head);
break;
case’3’:
system("cls");
printf("\n您选择的是信息查询!\n”);
QueryInformation(head);
break;
case’4’:
system("cls”);
printf(”\n您选择的是保存数据到文件!\n");
Save(head);
break;
case'5':
system("cls”);
printf(”\n您选择的是打开数据文件!\n”);
if((head=Read(head))!=NULL)
DisplayInformation(head);
break;
case'6’:
system(”cls");
printf(”\n您选择的是文件追加!\n”);
head=Add(head);
break;
case'7’:
system("cls”);
printf(”\n您选择的是帮助!\n”);
Help();
break;
default:
printf(”\n选择错误!请重新选择!\n”);
}
printf(”请选择返回主界面或退出!\n"); //选择是否继续
printf("主界面:1\t退出:2\t”);
scanf(”%d",&c);
while(!(c==1||c==2))
{
printf(”选择错误,请重新选择!”);
printf("\n主界面:1\t退出:2\t”);
scanf(”%d",&c);
}
if(c==1)
system("cls”);
else
{
system("cls");
_beep(300,400);
printf(”\n\t您已安全退出!\n”);
break;
}
}
}
展开阅读全文