#include<stdio.h>
#include<stdlib.h>
#define MAX 20
typedef struct Node{
int id;
char name[MAX];
char xy[MAX];
int year;
int month;
int day;
struct Node *next;
}node;
void menu()//菜单页面
{
printf("\n\n");
printf("\t==============================\n");
printf("\t 欢迎使用学生信息管理系统 \n");
printf("\t==============================\n");
printf("\t 1. 录入学生信息 \n");
printf("\t 2. 查询学生信息 \n");
printf("\t 3. 修改学生信息 \n");
printf("\t 4. 删除学生信息 \n");
printf("\t 5. 显示所有学生信息 \n");
printf("\t 6. 保存信息 \n");
printf("\t 7. 读取信息 \n");
printf("\t 8. 退出 \n");
printf("\t==============================\n");
printf("\t请选择功能1-8:");
printf("\n\n");
}
void enter_inf(node *p)//录入学生信息
{
printf("\t==============================\n");
printf("请输入\n");
printf("学生学号(id)");
scanf("%d",&p->id);
getchar();
printf("学生姓名:");
fgets(p->name,MAX,stdin);
printf("学生性别:");
fgets(p->xy,MAX,stdin);
printf("出生日期(年):");
scanf("%d",&p->year);
printf("出生日期(月):");
scanf("%d",&p->month);
printf("出生日期(日):");
scanf("%d",&p->day);
printf("\t==============================\n");
printf("\n\n");
}
void node_creat_one(node *Head)//单个学生信息创建,并升序排列
{
node *p, *pTemp, *pre;
int tag=1;
pTemp=(node *)malloc(sizeof(node));
enter_inf(pTemp);
pre=Head;
p=Head->next;
while(p!=NULL){
if(pTemp->id < p->id){
pre->next=pTemp;
pTemp->next=p;
tag=0;
}
else if(pTemp->id == p->id){
tag=0;
printf("此 id 已存在!\n");
break;
}
pre=p;
p=p->next;
if(!tag) break;
}
if(tag){
pre->next=pTemp;
pTemp->next=p;
}
}
void node_printf_one(node *p)//打印单个学生信息
{
printf("\t==============================\n");
printf("\t学生学号(id):%08d\n",p->id);
printf("\t学生姓名:%s",p->name);
printf("\t学生性别:%s",p->xy);
printf("\t出生日期:%d/%02d/%02d\n",p->year,p->month,p->day);
printf("\t==============================\n");
printf("\n\n");
}
void node_printf_all(node *Head)//打印所以学生信息
{
node *p=Head->next;
while(p!=NULL){
node_printf_one(p);
p=p->next;
}
}
node *node_find(node *Head,int id)//查询此id学生节点
{
node *p=Head->next;
while( p->id != id){
p=p->next;
}
return p;
}
void node_correct(node *Head)//修改此id学生节点
{
node *p;
int id;
printf("请输入学生id:");
scanf("%d",&id);
printf("\n\n");
p=node_find(Head,id);
if(p==NULL)
printf("发生错误!\n无此id!\n");
else{
enter_inf(p);
printf("修改成功!\n");
}
}
void node_delect(node *Head)//删除此id学生节点
{
node *p=Head->next, *pre=Head;
int id;
printf("请输入学生id:");
scanf("%d",&id);
while(p && p->id != id){
pre=p;
p=p->next;
}
if(p != NULL){
pre->next=p->next;
printf("删除成功!\n");
}
else
printf("发生错误,无此id!\n按任意键退出!\n");
}
void node_creat_more(node *Head)//多个学生信息录入
{
char chioce;
do{
node_creat_one(Head);
getchar();
printf("Continue?(Y/N)");
chioce=getchar();
}while(chioce=='y' || chioce=='Y');
}
void node_save(node *Head)//文件保存
{
node *p;
FILE *fp;
char filename[40];
printf("请输入要保存的文件名:");
scanf("%s",filename);
if((fp=fopen(filename,"wt"))==NULL){
printf("写文件出错,按任意键退出!");
getchar();
exit(1);
}
for(p=Head->next;p!=NULL;p=p->next)
fprintf(fp,"%d %s %s %d %d %d\n",p->id,p->name,p->xy,p->year,p->month,p->day);
printf("\n文件保存成功!按任意键退出!\n");
getchar();
fclose(fp);
}
node *node_read(node *Head)//文件读取
{
node *p, *pre, *r;
FILE *fp;
char filename[40];
printf("请输入要打开的文件名:");
scanf("%s",filename);
if((fp=fopen(filename,"rt"))==NULL){
printf("\n读文件出错!\n");
exit(1);
}
p=Head->next;
pre=p;
do{
fscanf(fp,"%d %s %s %d %d %d\n",&p->id,p->name,p->xy,&p->year,&p->month,&p->day);
p=(node *)malloc(sizeof(node));
pre->next=p;
r=pre;
pre=p;
}while(!feof(fp));
r->next=NULL;
fclose(fp);
printf("\n文件读取成功!\n");
return Head;
}
int main()
{
node *Head, *head;
Head=(node *)malloc(sizeof(node));
head=(node *)malloc(sizeof(node));
Head->next=head;
int key,tag=1,id_1;
char pig;
while(1){
menu();
scanf("%d",&key);
switch(key){
case 1:
if(tag){
enter_inf(head);
getchar();
printf("Continue?(Y/N)");
pig=getchar();
if(pig=='y' || pig=='Y')
node_creat_more(Head);
tag=0;
}
else
node_creat_more(Head);
break;
case 2:
if(tag){
printf("\t当前没有学生信息\n");
break;
}
printf("请输入学生id:");
scanf("%d",&id_1);
node_printf_one(node_find(Head,id_1));
break;
case 3:
if(tag){
printf("\t当前没有学生信息\n");
break;
}
node_correct(Head);
break;
case 4:
if(tag){
printf("\t当前没有学生信息\n");
break;
}
node_delect(Head);
break;
case 5:
if(tag)
printf("\t当前没有学生信息\n");
else
node_printf_all(Head);
break;
case 6:
if(tag){
printf("\t当前没有学生信息\n");
break;
}
node_save(Head);
break;
case 7:
node_read(Head);
tag=0;
break;
case 8:
exit(0);
break;
}
printf("按任意键继续!\n");
getchar();
getchar();
}
return 0;
}
网友评论