学生信息管理计划系统(C语言知识基于链表文件).doc
#+#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 dateint year;int month;int day;struct studentint ID;char Name8;int age;char xb;char telephone15;char address40;struct date birthday;char email40;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("tttt1-信息录入n");printf("n");printf("tttt2-信息修改n");printf("n");printf("tttt3-信息查询n");printf("n");printf("tttt4-保存数据到文件n");printf("n");printf("tttt5-打开数据文件n");printf("n");printf("tttt6-文件追加n");printf("n");printf("tttt7-帮助n");printf("n");printf("tttt0-退出n");printf("n");printf("友情提示:初次使用请先阅读帮助n");printf("*n");printf("请选择(0-7):");/*显示主菜单*/*帮助*/void Help()printf("nttt欢迎进入帮助系统!nn"); 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 电话tt地址t 出生年月t emailn");p=(struct student *)malloc(LEN);p=head;if(head!=NULL)while(p!=NULL)printf("%-dt%-st%-dt",p->ID,p->Name,p->age);printf("%-ct%-st%-st",p->xb,p->telephone,p->address);printf("%-d %d %d",p->birthday.year,p->birthday.month,p->birthday.day);printf("t%-sn",p->email);p=p->next;elseprintf("无数据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;elseprintf("无数据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;elseprintf("无数据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("ttt 姓名:t");scanf("%s",p->Name);printf("ttt 年龄:t");scanf("%d",&p->age);printf("ttt 性别(男M、女W):");scanf("%s",&p->xb);printf("ttt 电话(八位):t");scanf("%s",p->telephone);printf("ttt 地址:t");scanf("%s",p->address);printf("ttt 出生年月:t");scanf("%d%d%d",&p->birthday.year,&p->birthday.month,&p->birthday.day);printf("tttemail: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 findname8;struct student *p;printf("*请选择查询方式*n");printf("t1-按学号查询;t2-按姓名查询n");printf("*n");printf("请选择(1-2):");/*显示菜单信息*/select=getche();getch();switch (select)case1:printf("n 按学号查询n 请输入学生的学号:");scanf("%d",&findID);if(p=FindstudentID(head,findID)!=NULL) /*找到指定学号的学生*/printf("n 查找结果如下:n");printf("n学号t姓名t年龄t性别t 电话tt地址t 出生年月t emailn");printf("%dt%st%dt",p->ID,p->Name,p->age);printf("%ct%st%st",p->xb,p->telephone,p->address);printf("%d %d %d",p->birthday.year,p->birthday.month,p->birthday.day);printf("t%sn",p->email);else /*没有找到*/printf("您输入的学号不存在!n");break;case2:printf("n 按姓名查询n 请输入学生的姓名:");scanf("%s",&findname);if(p=FindstudentName(head,findname)!=NULL) /*找到指定姓名的学生*/printf("n 查找结果如下:n");printf("n 学号t 姓名t 年龄t 性别t 电话t 地址t 出生年月t emailn");printf("%dt%st%dt",p->ID,p->Name,p->age);printf("%ct%st%st",p->xb,p->telephone,p->address);printf("%d %d %d",p->birthday.year,p->birthday.month,p->birthday.day);printf("t%sn",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)case1: /*修改信息*/printf("您选择的是修改信息!n");printf("姓 名:%sn",p->Name);printf("原信息:学号:%dt 年龄:%dt 性别:%cn",p->ID,p->age,p->xb);printf("t 电话:%st 地址:%stemail:%sn",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;case2: /*删除信息*/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;elseif(p->ID=p1->ID);elsep1->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,"%dt",p->ID);fprintf(fp,"%st",p->Name);fprintf(fp,"%dt",p->age);fprintf(fp,"%ct",p->xb);fprintf(fp,"%st",p->telephone);fprintf(fp,"%st",p->address);fprintf(fp,"%d %d %dt",p->birthday.year,p->birthday.month,p->birthday.day);fprintf(fp,"%sn",p->email);p=p->next; /*将链表的内容写入文件*/fclose(fp);elseprintf("cannot open filen");/*打开数据文件*/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,"%dt",&p->ID)!=EOF)fscanf(fp,"%st",p->Name);fscanf(fp,"%dt",&p->age);fscanf(fp,"%ct",&p->xb);fscanf(fp,"%st",p->telephone);fscanf(fp,"%st",p->address);fscanf(fp,"%d %d %dt",&p->birthday.year,&p->birthday.month,&p->birthday.day);fscanf(fp,"%sn",p->email);head=Insert(head,p);p=(struct student *)malloc(LEN);fclose(fp);elseprintf("cannot open filen");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;elsepre=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)case0:printf("n您选择的是退出!n");_beep(300,400);continue;case1:system("cls");printf("n您选择的是信息录入!n");head=InformationInput(head);break;case2:system("cls");printf("n您选择的是信息修改!n");head=EditInformation(head);break;case3:system("cls");printf("n您选择的是信息查询!n");QueryInformation(head);break;case4:system("cls");printf("n您选择的是保存数据到文件!n");Save(head);break;case5:system("cls");printf("n您选择的是打开数据文件!n");if(head=Read(head)!=NULL)DisplayInformation(head);break;case6:system("cls");printf("n您选择的是文件追加!n");head=Add(head);break;case7:system("cls");printf("n您选择的是帮助!n");Help();break;default:printf("n选择错误!请重新选择!n");printf("请选择返回主界面或退出!n"); /选择是否继续printf("主界面:1t退出:2t"); scanf("%d",&c);while(!(c=1|c=2)printf("选择错误,请重新选择!"); printf("n主界面:1t退出:2t"); scanf("%d",&c); if(c=1) system("cls"); else system("cls"); _beep(300,400); printf("nt您已安全退出!n"); break;