版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include <stdio.h>#include <stdlib.h>#include <string.h>#define PF printf#define LEN sizeof(struct student)/定义结构体struct student char NO20; char name20; int age; char sex3; /*'F'表示性别男,'M'表示性别女*/ char birthday10; char address30; char phone20; char e_mail20; struct stu
2、dent *next; /下个结点;typedef struct student STU;STU *head=NULL; /全局指针int n,i=0; /全局变量/自定义函数void show_menu(); /显示菜单void menu(); /执行菜单void creat_stu(); /建立链表 void insert_stu(); /学生信息录入void print_stu(); /学生信浏览void search_NO(); /以学号方式查询信息void search_name(); /以姓名方式查询信息void arrage_stu(); /排序void del_stu(); /
3、删除学生信息void revise_stu(); /修改学生信息void save(); /保存信息void main() creat_stu(); menu();/创建链表void creat_stu() FILE *fp; long size; STU *p1,*p2; head=(STU *)malloc(sizeof(STU); head->next=NULL; if(fp=fopen("fname.txt","r")=NULL) printf("这是新表n"); return; fseek(fp,0L,2); size
4、=ftell(fp); if(!size) printf("这是空表n"); return; /开始创建链表 rewind(fp); /移动到文件首 p2=head->next; /找到但前位置 while(!feof(fp) p1=(STU *)malloc(sizeof(STU); fscanf(fp,"%s %s %d %s %s %s %s %sn",p1->NO,p1->name,&p1->age, p1->sex,p1->birthday,p1->address,p1->phone,p1
5、->e_mail); p1->next=NULL; /创建节点完 if(head->next=NULL) head->next=p1; else p2->next=p1; p2=p1; n+; p2->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:se
6、arch_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("tt1.输 入 学 生 信 息 n"); PF("tt2.浏 览 学 生 信 息 n"); PF(
7、"tt3.以学号方式查询信息n"); PF("tt4.以姓名方式查询信息n"); PF("tt5.删 除 学 生 信 息 n"); PF("tt6.修 改 学 生 信 息 n"); PF("tt7 排 序 n"); PF("tt0. 退 出 n"); PF("n"); PF("n请选择n");/学生信息录入void insert_stu() /学生信息录入 n=0; STU *p1=NULL,*p2=NULL; p1=(STU *)ma
8、lloc(sizeof(STU); PF("n录入学生信息n"); /录入学生信息 PF("tt输入学生学号:t"); scanf("%s",p1->NO); /学号 PF("tt输入学生姓名:t"); scanf("%s",p1->name); /姓名 PF("tt输入学生年龄:t"); scanf("%d",&p1->age); /年龄 PF("tt输入学生性别:t"); scanf("%s&qu
9、ot;,p1->sex); /性别 PF("tt输入学生出生年月:t"); scanf("%s",p1->birthday); /出生年月 PF("tt输入学生地址:t"); scanf("%s",p1->address); /地址 PF("tt输入学生电话:t"); scanf("%s",p1->phone); /电话 PF("tt输入学生E-mail:t"); scanf("%s",p1->e_mail
10、); /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")
11、; return; for(p=head->next;p!=NULL;p=p->next) /读出信息 PF("学生信息浏览n"); PF("tt学生学号:t%sn",p->NO); PF("tt学生姓名:t%sn",p->name); PF("tt学生年龄:t%dn",p->age); PF("tt学生性别:t%sn",p->sex); PF("tt学生出生年月:t%sn",p->birthday); PF("tt学生地址
12、:t%sn",p->address); PF("tt学生电话:t%sn",p->phone); PF("tt学生E-mail:t%sn",p->e_mail); PF("n"); /输出信息 /学生姓名信息查找void search_name() /学生姓名信息查找 STU *p=NULL; char name20; if(head=NULL) /判断链表是否为空 PF("文档中无记录!n"); return; PF("输入学生姓名:"); scanf("%
13、s",name); for(p=head->next;p!=NULL;p=p->next) /读出信息 if(!strcmp(p->name,name) PF("您查找的学生是n"); PF("tt学生学号:t%sn",p->NO); PF("tt学生姓名:t%sn",p->name); PF("tt学生年龄:t%dn",p->age); PF("tt学生性别:t%sn",p->sex); PF("tt学生出生年月:t%sn"
14、;,p->birthday); PF("tt学生地址:t%sn",p->address); PF("tt学生电话:t%sn",p->phone); PF("tt学生E-mail:t%sn",p->e_mail); PF("n"); i=1; /输出信息 if(!i) PF("无该生信息!请查证:"); /没找到信息时的处理 /学生学号信息查找void search_NO() /学生学号信息查找 STU *p=NULL; char NO20; if(head=NULL) /
15、判断链表是否为空 PF("文档中无记录!n"); return; PF("请输入学生学号:"); scanf("%s",NO); for(p=head->next;p!=NULL;p=p->next) /读出信息 if(!strcmp(p->NO,NO) PF("您查找的学生是n"); PF("tt学生学号:t%sn",p->NO); PF("tt学生姓名:t%sn",p->name); PF("tt学生年龄:t%dn",p-
16、>age); PF("tt学生性别:t%sn",p->sex); PF("tt学生出生年月:t%sn",p->birthday); PF("tt学生地址:t%sn",p->address); PF("tt学生电话:t%sn",p->phone); PF("tt学生E-mail:t%sn",p->e_mail); PF("n"); i=1; /输出信息 if(!i) PF("无该生信息!请查证:"); /没找到信息时的处理
17、 /修改学生信息void revise_stu() STU *p=NULL; if(head=NULL) /判断链表是否为空 PF("文档中无记录!n"); return; char NO20; PF("请输入学生的学号:t"); scanf("%s",NO); for(p=head->next;p!=NULL;p=p->next) if(!strcmp(p->NO,NO) /验证信息是否正确 PF("您要修改的学生是n"); PF("tt学生学号:t%sn",p->NO
18、); PF("tt学生姓名:t%sn",p->name); PF("tt学生年龄:t%dn",p->age); PF("tt学生性别:t%sn",p->sex); PF("tt学生出生年月:t%sn",p->birthday); PF("tt学生地址:t%sn",p->address); PF("tt学生电话:t%sn",p->phone); PF("tt学生E-mail:t%sn",p->e_mail); PF(
19、"n"); /输出要修改信息 i=1; PF("修改学号为%s的学生n",NO); strcpy(p->NO,NO); PF("tt输入修改学生姓名:t"); scanf("%s",p->name); PF("tt输入修改学生年龄:t"); scanf("%d",&p->age); PF("tt输入修改学生性别:t"); scanf("%s",p->sex); PF("tt输入修改学生出生年月:
20、t"); scanf("%s",p->birthday); PF("tt输入修改学生地址:t"); scanf("%s",p->address); PF("tt输入修改学生电话:t"); scanf("%s",p->phone); PF("tt输入修改学生E-mail:t"); scanf("%s",p->e_mail); PF("n"); /输入修改信息 save(); if(!i) PF("
21、;无该生信息!请查证:"); /*没找到信息时的处理*/ /删除学生信息void del_stu() STU *p=NULL; if(head=NULL) /判断链表是否为空 PF("文档中无记录!n"); return; else char NO20; PF("请输入学生的学号:t"); scanf("%s",NO); for(p=head;p!=NULL;p=p->next) if(!strcmp(p->next->NO,NO) /验证信息是否正确 PF("您要删除的学生是n");
22、PF("tt学生学号:t%sn",p->next->NO); PF("tt学生姓名:t%sn",p->next->name); PF("tt学生年龄:t%dn",p->next->age); PF("tt学生性别:t%sn",p->next->sex); PF("tt学生出生年月:t%sn",p->next->birthday); PF("tt学生地址:t%sn",p->next->address); P
23、F("tt学生电话:t%sn",p->next->phone); PF("tt学生E-mail:t%sn",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("无该生信息!请查证:"); /没找
24、到信息时的处理 return; /按学号排序void arrage_stu() STU *p1,*p2; int in=0,j; if(head->next=NULL) /首先判断 printf("你还没有记录,无法排序n"); return ; printf("n=%d",n); p1=head->next; for(in=0;in<n-1;in+) for(j=0,p1=head->next;j<=n-in-3;p1=p1->next,j+) if(j=0)/第一次比较第一个和第二个节点信息 if(strcmp(p
25、1->NO,p1->next->NO)/比较p1本身和p1下一个节点 p2=p1->next; p1->next=p1->next->next; p2->next=p1; head->next=p2; p1=head->next;/从新给CUR赋值 /* p1=head->next; p1=p2; 错误:如果一个变量=他前一个节点的NEXT 那么不可以说把另外一个变量赋给它就可以改变它 前一个节点的NEXT 他只能操作后节点! */ if(strcmp(p1->next->NO,p1->next->next->NO)/比较p1下一个和p1下两个节点 p2=p1->next; p1->next=p1->
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广东汕尾市建城投资有限公司招聘7人笔试历年参考题库附带答案详解
- 护理人员护理发展
- 2026年道德法治教学工作计划
- 2026年大学生生涯规划班会策划
- 导尿术的并发症处理与护理措施
- 压疮护理的常见误区解析
- 2026年西安未央区未央湖医学院社区卫生服务中心招聘考试备考题库及答案详解
- 2026年结构化教学培训主题
- 2026浙江大学医学院附属邵逸夫医院健康促进中心招聘4人考试参考题库及答案详解
- 2026年防火安全课教学实录
- 《展望物联网》+课件+2025-2026学年川教版(2024)初中信息科技八年级上册
- 废气处理系统建设汇报报告
- DB61∕T 1802-2023 水工隧洞突涌水风险评估及防治技术规范
- 2023年8月19日广西区三支一扶面试真题及答案解析
- 甘肃靖煤能源有限公司大水头煤矿分公司矿山地质环境保护与土地复垦方案专家组审查意见
- DZ/T 0275.3-2015岩矿鉴定技术规范第3部分:矿石光片制样
- 医疗机构中医护理门诊建设规范
- DB63T 1788-2020小叶香菜制种技术规程
- 网点功能布局及客户动线管理
- 2025中国人保财险春季招聘管理单位笔试遴选500模拟题附带答案详解
- 兄弟自动切线平缝机S-7000DD中文使用说明书
评论
0/150
提交评论