学生信息管理系统(C语言基于链表文件)

学生信息管理系统(C语言基于链表文件)
学生信息管理系统(C语言基于链表文件)

#include

#include

#include

#include

#include

#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

{

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->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);

}

/*******************************保存数据到文件**************************/

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;

}

}

}

相关主题
相关文档
最新文档