您的当前位置:首页正文

学生信息管理系统(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; };

13

/*************************函数原型*********************/ 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(\"\\\\1--信息录入\\n\"); printf(\"\\n\");

printf(\"\\\\2--信息修改\\n\"); printf(\"\\n\");

printf(\"\\\\3--信息查询\\n\"); printf(\"\\n\");

printf(\"\\\\4--保存数据到文件\\n\"); printf(\"\\n\");

printf(\"\\\\5--打开数据文件\\n\");

13

理系统

printf(\"\\n\");

printf(\"\\\\6--文件追加\\n\"); printf(\"\\n\");

printf(\"\\\\7--帮助\\n\"); printf(\"\\n\");

printf(\"\\\\0--退出\\n\"); printf(\"\\n\");

printf(\"友情提示:初次使用请先阅读帮助\\n\");

printf(\"*******************************************************************************\\n\");

printf(\"请选择(0-7):\");/*显示主菜单*/ }

/*************************************

**************************************************/

void Help() {

printf(\"\\n\\\欢迎进入帮助系统!\\n\\n\");

printf(\"\1.请按照主菜单提示选择所需执行功能的数字代号!\\n\"); printf(\"\2.所有文件请按照规范输入\\n\");

printf(\"\3.刚开始执行程序时若需要文本文件里的数据,请先进行读取文件信息!\\n\"); printf(\"\4.修改信息以后,请切记需要保存!\\n\"); printf(\"\\n\"); }

/***********************显示所有学生信息**********************/ void DisplayInformation(struct student *head) {

struct student *p;

printf(\"*********************************************************************

13

**********\");

printf(\"\\n学号\姓名\年龄\性别\ 电话\\地址\ 出生年月\ email\\n\"); p=(struct student *)malloc(LEN); p=head; if(head!=NULL) while(p!=NULL) { printf(\"%-d\%-s\%-d\\ printf(\"%-c\%-s\%-s\\

printf(\"%-d %d %d\ printf(\"\%-s\\n\ 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;

13

信息

else

}

p=p->next;

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)

return p; }

/********************学生信息录入**********************************/

struct student *InformationInput(struct student *head)

while(p!=NULL) { } else

printf(\"无数据\\n\");

if(strcmp(p->Name,findname)==0) break; p=p->next;

13

{

int number,i; struct student *p;

p=(struct student *)malloc(LEN);

printf(\"\\n请输入本次录入的学生人数:\"); scanf(\"%d\

for(i=0;i}

printf(\"\\n 您的输入信息是:\\n\");

DisplayInformation(head); return(head); }

printf(\"请输入第%d个学生的学号(八个字符以内):\ scanf(\"%d\ printf(\"\\\ 姓名:\\"); scanf(\"%s\ printf(\"\\\ 年龄:\\"); scanf(\"%d\

printf(\"\\\ 性别(男M、女W):\"); scanf(\"%s\

printf(\"\\\ 电话(八位):\\"); scanf(\"%s\ printf(\"\\\ 地址:\\"); scanf(\"%s\ printf(\"\\\ 出生年月:\\");

scanf(\"%d%d%d\ printf(\"\\\email:\\"); scanf(\"%s\ head=Insert(head,p);

p=(struct student *)malloc(LEN);

13

/**************************学生信息查询*************************/

void QueryInformation(struct student *head) {

char select; int findID; char findname[8]; struct student *p;

printf(\"*********************请选择查询方式*************************\\n\"); printf(\"\1--按学号查询;\2--按姓名查询\\n\");

printf(\"************************************************************\\n\"); printf(\"请选择(1-2):\");/*显示菜单信息*/ select=getche(); getch(); switch (select) {

case'1':

printf(\"\\n 按学号查询\\n 请输入学生的学号:\"); scanf(\"%d\

if((p=FindstudentID(head,findID))!=NULL) /*找到指定学号的学生*/ {

printf(\"\\n 查找结果如下:\\n\");

printf(\"\\n学号\姓名\年龄\性别\ 电话\\地址\ 出生年月\ email\\n\"); printf(\"%d\%s\%d\\ printf(\"%c\%s\%s\\

printf(\"%d %d %d\ printf(\"\%s\\n\ }

else /*没有找到*/

printf(\"您输入的学号不存在!\\n\");

13

break;

case'2':

printf(\"\\n 按姓名查询\\n 请输入学生的姓名:\"); scanf(\"%s\

if((p=FindstudentName(head,findname))!=NULL) /*找到指定姓名的学生*/ {

printf(\"\\n 查找结果如下:\\n\");

printf(\"\\n 学号\ 姓名\ 年龄\ 性别\ 电话\ 地址\ 出生年月\

email\\n\");

} }

/*********************************修改学生信息***********************/

struct student *EditInformation(struct student *head) {

int findID; char select; struct student *p;

printf(\"\\n 请输入学生的学号:\");

}

printf(\"%d\%s\%d\\ printf(\"%c\%s\%s\\

printf(\"%d %d %d\ printf(\"\%s\\n\

else /*没有找到*/

printf(\"您输入的姓名不存在!\\n\");

break;

default:

printf(\"选择错误!\\n\");

13

scanf(\"%d\

if((p=FindstudentID(head,findID))!=NULL) /*找到指定学号的学生*/ {

printf(\"*********************请修改方式*************************\\n\"); printf(\"\1--修改信息;\2--删除信息\\n\");

printf(\"************************************************************\\n\"); printf(\"请选择(1-2):\"); select=getche(); getch(); switch (select) {

case'1': /*修改信息*/

printf(\"您选择的是修改信息!\\n\"); printf(\"姓 名:%s\\n\

printf(\"原信息:学号:%d\ 年龄:%d\ 性别:%c\\n\ printf(\"\

%s\

址:%s\email:%s\\n\

printf(\"请输入新信息\\n\"); printf(\"学号\\"); scanf(\"%d\ printf(\"姓名:\\"); scanf(\"%s\ printf(\"年龄:\\"); scanf(\"%d\

printf(\"性别(男M、女W):\"); scanf(\"%s\ printf(\"电话:\\"); scanf(\"%s\ printf(\"地址:\\"); scanf(\"%s\ printf(\"出生年月:\\");

13

}

}

scanf(\"%d%d%d\ printf(\"email:\\"); scanf(\"%s\ 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) { }

if(p->IDID) {

p->next=head; head=p;

head=p; p->next=NULL; return(head);

13

}

return(head);

p1=head;

while((p->ID>p1->ID)&&(p1->next!=NULL)) { }

if(p->IDID) { } else { }

return(head); }

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

void Save(struct student *head) {

if(p->ID==p1->ID) else { }

p1->next=p; p->next=NULL; ; p->next=p1; p0->next=p; p0=p1; p1=p1->next;

13

FILE *fp; struct student *p; p=head;

if((fp=fopen(DAT_FILENAME,\"w+\"))!=NULL) /*以W+的方式打开文件*/ {

} else }

while(p!=NULL) { }

fprintf(fp,\"%d %d %d\\

fprintf(fp,\"%s\\n\ p=p->next;

fprintf(fp,\"%s\\ fprintf(fp,\"%s\\ fprintf(fp,\"%d\\

fprintf(fp,\"%c\\ fprintf(fp,\"%d\\ fprintf(fp,\"%s\\

/*将链表的内容写入文件*/

fclose(fp);

printf(\"cannot open file\\n\");

13

/***************************打开数据文件************************/

struct student *Read(struct student *head) {

struct student *p;

p=(struct student *)malloc(LEN); FILE *fp;

if((fp=fopen(DAT_FILENAME,\"r\"))!=NULL) {

} else

printf(\"cannot open file\\n\"); } fclose(fp);

fscanf(fp,\"%s\\

fscanf(fp,\"%d\\

fscanf(fp,\"%s\\

fscanf(fp,\"%s\\

fscanf(fp,\"%d %d %d\\

fscanf(fp,\"%s\\n\ head=Insert(head,p);

p=(struct student *)malloc(LEN);

fscanf(fp,\"%c\\ /*读取文件中的内容到链表中*/ while(fscanf(fp,\"%d\\ {

return head;

13

}

/**************************文件内容追加************************/ 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) { } else {

pre=head; p=pre->next;

while(p!=NULL&&p->ID!=findID) {

pre=p; p=p->next;

/**************************删除信息****************************/

p=head;

head=head->next;

13

}

}

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

13

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

13

}

Help(); break;

default:

printf(\"\\n选择错误!请重新选择!\\n\");

printf(\"请选择返回主界面或退出!\\n\"); //选择是否继续 printf(\"主界面:1\退出:2\\"); scanf(\"%d\ while(!(c==1||c==2)) {

printf(\"选择错误,请重新选择!\");

printf(\"\\n主界面:1\退出:2\\"); scanf(\"%d\

}

if(c==1) system(\"cls\"); else {

system(\"cls\");

_beep(300,400);

printf(\"\\n\您已安全退出!\\n\"); break; }

} }

13

因篇幅问题不能全部显示,请点此查看更多更全内容