永发信息网

C 程序编程(初学

答案:3  悬赏:0  手机版
解决时间 2021-11-10 12:19
C 程序编程(初学
最佳答案




#include
#include
#include
#define PF printf
#define LEN sizeof(struct student)

struct student
{
char NO[20];
char name[20];
int age;
char sex[3];
char birthday[10];
char address[30];
char phone[20];
char e_mail[20];
struct student *next; //下个结点
};
typedef struct student STU;
STU *head=NULL; //全局指针
int n,i=0; //全局变量

void show_menu(); //显示菜单
void menu();
void insert_stu(); //学生信息录入
void print_stu(); //学生信浏览
void search_NO(); //以学号方式查询信息
void search_name(); //以姓名方式查询信息
void arrage_stu(); //排序
void del_stu(); //删除学生信息
void revise_stu(); //修改学生信息
void begin();//建立链表
void save();
void end(); //结束

void main()
{
begin();

menu();

}
void begin(){
FILE *fp;
long size;
STU *NEW,*cur;
head=(STU *)malloc(sizeof(STU));
head->next=NULL;
if((fp=fopen("fname.txt","r"))==NULL)
{
printf("这是新表\n");
return;
}
fseek(fp,0L,2);
size=ftell(fp);
if(!size)
{
printf("这是空表\n");
return;
}
//开始创建链表
rewind(fp);//移动到文件首
cur=head->next;
while(!feof(fp))
{

NEW=(STU *)malloc(sizeof(STU));
fscanf(fp,"%s %s %d %s %s %s %s %s\n",NEW->NO,NEW->name,&NEW->age,\
NEW->sex,NEW->birthday,NEW->address,NEW->phone,NEW->e_mail);
NEW->next=NULL;
//创建节点完

if(head->next==NULL)
head->next=NEW;
else
cur->next=NEW;
cur=NEW;
n++;

}
cur->next=NULL;
fclose(fp);
}

void menu()
{
int c;
show_menu();
while(1)
{
scanf("%d",&c);
switch(c)
{
getchar();
case 1:insert_stu();break;
case 2:print_stu();break;
case 3:search_NO(); break;
case 4:search_name(); break;
case 5:del_stu(); break;
case 6:revise_stu(); break;
case 7:arrage_stu();break;
case 0:exit(0);
}
show_menu();
}

}
void show_menu()
{

PF("\n");
PF("\n************************菜单*******************************\n");
PF("\t\t1.输入学生信息\n");
PF("\t\t2.浏览学生信息\n");
PF("\t\t3.以学号方式查询信息\n");
PF("\t\t4.以姓名方式查询信息\n");
PF("\t\t5.删除学生信息\n");
PF("\t\t6.修改学生信息\n");
PF("\t\t7 排 序");
PF("\t\t0.退出\n");
PF("*************************************************************\n");
PF("\n请选择\n");

}

void insert_stu() //学生信息录入
{

n=0;
STU *p1=NULL,*p2=NULL;
p1=(STU *)malloc(sizeof(STU));
PF("\n***********************录入学生信息***************************\n"); //录入学生信息
PF("\t\t输入学生学号:\t");
scanf("%s",p1->NO); //学号
PF("\t\t输入学生姓名:\t");
scanf("%s",p1->name); //姓名
PF("\t\t输入学生年龄:\t");
scanf("%d",&p1->age); //年龄
PF("\t\t输入学生性别:\t");
scanf("%s",p1->sex); //性别
PF("\t\t输入学生出生年月:\t");
scanf("%s",p1->birthday); //出生年月
PF("\t\t输入学生地址:\t");
scanf("%s",p1->address); //地址
PF("\t\t输入学生电话:\t");
scanf("%s",p1->phone); //电话
PF("\t\t输入学生E-mail:\t");
scanf("%s",p1->e_mail); //E-mail
n++;
if(head->next==NULL)
{
head=(STU *)malloc(LEN);
head->next=p1;
}
else
{
for(p2=head;p2->next!=NULL;p2=p2->next);
p2->next=p1;
}
p1->next=NULL;

save();//保存到文件

}

void print_stu() //学生信浏览
{
STU *p=NULL;
if(head==NULL) //判断链表是否为空
{
PF("文档中无记录!\n");
return;
}
for(p=head->next;p!=NULL;p=p->next) //读出信息
{
PF("***************************学生信浏览***************************\n");
PF("\t\t学生学号:\t%s\n",p->NO);
PF("\t\t学生姓名:\t%s\n",p->name);
PF("\t\t学生年龄:\t%d\n",p->age);
PF("\t\t学生性别:\t%s\n",p->sex);
PF("\t\t学生出生年月:\t%s\n",p->birthday);
PF("\t\t学生地址:\t%s\n",p->address);
PF("\t\t学生电话:\t%s\n",p->phone);
PF("\t\t学生E-mail:\t%s\n",p->e_mail);
PF("\n");} //输出信息
}

void search_name() //学生姓名信息查找
{
STU *p=NULL;
char name[20];
if(head==NULL) //判断链表是否为空
{
PF("文档中无记录!\n");
return;
}
PF("输入学生姓名:");
scanf("%s",name);
for(p=head->next;p!=NULL;p=p->next) //读出信息
{
if(!strcmp(p->name,name))
{PF("***************************您查找的学生是***************************\n");
PF("\t\t学生学号:\t%s\n",p->NO);
PF("\t\t学生姓名:\t%s\n",p->name);
PF("\t\t学生年龄:\t%d\n",p->age);
PF("\t\t学生性别:\t%s\n",p->sex);
PF("\t\t学生出生年月:\t%s\n",p->birthday);
PF("\t\t学生地址:\t%s\n",p->address);
PF("\t\t学生电话:\t%s\n",p->phone);
PF("\t\t学生E-mail:\t%s\n",p->e_mail);
PF("\n");
i=1;}
} //输出信息
if(!i)
{PF("无该生信息!请查证:"); } //没找到信息时的处理

}

void search_NO() //学生学号信息查找
{
STU *p=NULL;
char NO[20];
if(head==NULL) //判断链表是否为空
{
PF("文档中无记录!\n");
return;
}
PF("请输入学生学号:");
scanf("%s",NO);
for(p=head->next;p!=NULL;p=p->next) //读出信息
{
if(!strcmp(p->NO,NO))
{PF("***************************您查找的学生是***************************\n");
PF("\t\t学生学号:\t%s\n",p->NO);
PF("\t\t学生姓名:\t%s\n",p->name);
PF("\t\t学生年龄:\t%d\n",p->age);
PF("\t\t学生性别:\t%s\n",p->sex);
PF("\t\t学生出生年月:\t%s\n",p->birthday);
PF("\t\t学生地址:\t%s\n",p->address);
PF("\t\t学生电话:\t%s\n",p->phone);
PF("\t\t学生E-mail:\t%s\n",p->e_mail);
PF("\n");
i=1;}
} //输出信息
if(!i)
{PF("无该生信息!请查证:"); } //没找到信息时的处理

}

void revise_stu()
{
STU *p=NULL;
if(head==NULL) //判断链表是否为空
{
PF("文档中无记录!\n");
return;
}
char NO[20];
PF("请输入学生的学号:\t");
scanf("%s",NO);
for(p=head->next;p!=NULL;p=p->next)
{
if(!strcmp(p->NO,NO)) //验证信息是否正确
{
PF("***********************你要修改的学生是*****************************\n");
PF("\t\t学生学号:\t%s\n",p->NO);
PF("\t\t学生姓名:\t%s\n",p->name);
PF("\t\t学生年龄:\t%d\n",p->age);
PF("\t\t学生性别:\t%s\n",p->sex);
PF("\t\t学生出生年月:\t%s\n",p->birthday);
PF("\t\t学生地址:\t%s\n",p->address);
PF("\t\t学生电话:\t%s\n",p->phone);
PF("\t\t学生E-mail:\t%s\n",p->e_mail);
PF("\n"); //输出要修改信息
i=1;
PF("**********************修改学号为%s的学生************************\n",NO);
strcpy(p->NO,NO);
PF("\t\t输入修改学生姓名:\t");
scanf("%s",p->name);
PF("\t\t输入修改学生年龄:\t");
scanf("%d",&p->age);
PF("\t\t输入修改学生性别:\t");
scanf("%s",p->sex);
PF("\t\t输入修改学生出生年月:\t");
scanf("%s",p->birthday);
PF("\t\t输入修改学生地址:\t");
scanf("%s",p->address);
PF("\t\t输入修改学生电话:\t");
scanf("%s",p->phone);
PF("\t\t输入修改学生E-mail:\t");
scanf("%s",p->e_mail);
PF("\n"); //输入修改信息
save();
}

}if(!i)
{PF("无该生信息!请查证:");}
}

void del_stu()
{
STU *p=NULL;
if(head==NULL) //判断链表是否为空
{
PF("文档中无记录!\n");
return;
}
else
{
char NO[20];
PF("请输入学生的学号:\t");
scanf("%s",NO);
for(p=head;p!=NULL;p=p->next)
{
if(!strcmp(p->next->NO,NO)) //验证信息是否正确
{
PF("***********************你要删除的学生是*****************************\n");
PF("\t\t学生学号:\t%s\n",p->next->NO);
PF("\t\t学生姓名:\t%s\n",p->next->name);
PF("\t\t学生年龄:\t%d\n",p->next->age);
PF("\t\t学生性别:\t%s\n",p->next->sex);
PF("\t\t学生出生年月:\t%s\n",p->next->birthday);
PF("\t\t学生地址:\t%s\n",p->next->address);
PF("\t\t学生电话:\t%s\n",p->next->phone);
PF("\t\t学生E-mail:\t%s\n",p->next->e_mail);
PF("\n"); //输出要删除的信息
i=1;
if(p->next->next)
{
printf("第一个\n");
p->next=p->next->next;
}
else
p->next=NULL;
n--;
save();
return;
}

}if(!i)
{PF("无该生信息!请查证:");}
return;
}
}
//################################### 排 序 #####################################
//使用NUM全局变量控制冒泡法循环次数 在新增或减少了一条纪录后请务必n++或n--

void arrage_stu()
{
STU *cur,*s;
int in=0,j;
if(head->next==NULL)
{//首先判断
printf("你还没有记录,无法排序\n");
return ;
}
printf("n=%d",n);
cur=head->next;
for(in=0;in for(j=0,cur=head->next;j<=n-in-3;cur=cur->next,j++)
{
if(j==0)//第一次比较第一个和第二个节点信息
{
if(cur->NO>cur->next->NO)//比较cur本身和cur下一个节点
{
s=cur->next;
cur->next=cur->next->next;
s->next=cur;
head->next=s;
cur=head->next;//从新给CUR赋值

}
}
if(cur->next->NO>cur->next->next->NO)//比较cur下一个和cur下两个节点
{
s=cur->next;
cur->next=cur->next->next;
s->next=cur->next->next;
cur->next->next=s;
}

}
if(head->next->NO>head->next->next->NO)//只有两个节点信息时直接比较他们两个
{
cur=head->next;
head->next=cur->next;
cur->next=cur->next->next;
head->next->next=cur;
if(n==2)//只有两个节点信息时把第二个节点的next赋为空
head->next->next->next=NULL;
}
}

void save()
{
printf("******************保存信息并结束*****************************\n");
STU *p=NULL;
FILE *fp;
char *filename="fname.txt";
if((fp=fopen("fname.txt","w"))==NULL)//出错检测
{
printf("\n打不开文件!\n");
return;
}
if(head->next==NULL)
{
printf("\n信息为空!\n");
return;
}
else
p=head->next;
while(p!=NULL)
{
fprintf(fp,"%s %s %d %s %s %s %s %s\n",p->NO,p->name,p->age,
p->sex,p->birthday,p->address,p->phone,p->e_mail);//存入文件
p=p->next;
}
printf("保存完毕!\n");
fclose(fp);
// exit(0);
}
全部回答
答的好复杂哦
很不客气的说,连这么基本的C都要那上网来的话,那么你可以回家休息了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
五五身材男生如何搭配显腿长
永安财产保险股份有限公司兰州市西固支公司办
影视文化产业现有的影视城运作模式有哪些?
每年专接本参考人数
液化气灶断火是怎么回事打着了一会就灭了
进口DC53跟国产SKH-9这两种材料用作冷冲模哪
大神,麻烦您一个事,我真的遇到难题了。有三
This land so rich in beauty为什么没有be动
急急急 word里设置了目录 然后文中1级2级标题
我买了6日Z5次到南宁东站由于只有20分钟的时
兰州银行白塔山支行办公地址在什么地方,我要
17岁穿古风连衣裙会不会显老?或是显大呀?身
翩翩白衣公子txt
如图所示,物体B重100牛,在力F作用下匀速上
下雨后都会出现什么景色
推荐资讯
按规律填出下面数列中的空格.(1)81、64、4
祝福鲜花店地址好找么,我有些事要过去,
中国建设银个人银行
在()里填上合适的数,7()5x()=2()5()小学数学
我想请问懂法律的朋友帮忙大约做个判断 孙某
泰迪熊狗能吃人类吃的东西吗?
河南烤瓷牙价格如何?到底门牙用哪一种材质既
写通讯稿有什么要求么
mp4/ts/asf/wmv/mkv/web
求动漫天堂之吻所有歌曲呐,,拜托了各位大大
求陈字和熙字毛笔图片
取名懿津好吗?是女孩,但字太多笔画了,我怕
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?