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

上传人:b****4 文档编号:3658929 上传时间:2022-11-24 格式:DOCX 页数:17 大小:18.01KB
下载 相关 举报
学生信息管理系统C语言基于链表文件.docx_第1页
第1页 / 共17页
学生信息管理系统C语言基于链表文件.docx_第2页
第2页 / 共17页
学生信息管理系统C语言基于链表文件.docx_第3页
第3页 / 共17页
学生信息管理系统C语言基于链表文件.docx_第4页
第4页 / 共17页
学生信息管理系统C语言基于链表文件.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

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

《学生信息管理系统C语言基于链表文件.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统C语言基于链表文件.docx(17页珍藏版)》请在冰豆网上搜索。

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

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

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1