#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 9. 退出 \n");
printf("\t==============================\n");
printf("\t请选择功能1-9:");
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;
}
}
int node_printf_one(node *p)//打印单个学生信息
{
if(!p)
return 1;
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");
return 0;
}
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;
if(!p)
break;
}
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");
return NULL;
}
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;
}
node *node_printf_all_1(node *head)//逆序输出
{
if(head==NULL)
return NULL;
node_printf_all_1(head->next);
node_printf_one(head);
return NULL;
}
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;
}
do{
printf("请输入学生id:");
scanf("%d",&id_1);
if(node_printf_one(node_find(Head,id_1)))
printf("无此id!\n");
printf("Continue(y/n)?\n");
getchar();
pig=getchar();
}while(pig=='y' || pig=='Y');
break;
case 3:
if(tag){
printf("\t当前没有学生信息\n");
break;
}
do{
node_correct(Head);
getchar();
printf("Continue(y/n)?\n");
pig=getchar();
}while(pig=='y' || pig=='Y');
break;
case 4:
if(tag){
printf("\t当前没有学生信息\n");
break;
}
do{
node_delect(Head);
getchar();
printf("Continue(y/n)?\n");
pig=getchar();
}while(pig=='y' || pig=='Y');
break;
case 5:
if(tag)
printf("\t当前没有学生信息\n");
else
node_printf_all(Head);
break;
case 6:
if(tag)
printf("\t当前没有学生信息\n");
else
node_printf_all_1(head);
break;
case 7:
if(tag){
printf("\t当前没有学生信息\n");
break;
}
node_save(Head);
break;
case 8:
if(!node_read(Head))
tag=1;
else
tag=0;
break;
case 9:
exit(0);
break;
default:
printf("输入错误!请重新输入!\n");
break;
}
if(Head->next == NULL)
tag=1;
printf("按任意键继续!\n");
getchar();
getchar();
}
return 0;
}
学生信息管理系统3.0
最后编辑于 :
?著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 【蝴蝶效应】 蝴蝶效应:上个世纪70年代,美国一个名叫洛伦兹的气象学家在解释空气系统理论时说,亚马逊雨林一只蝴蝶...