用链表实现学生信息存储系统_第1页
用链表实现学生信息存储系统_第2页
用链表实现学生信息存储系统_第3页
用链表实现学生信息存储系统_第4页
用链表实现学生信息存储系统_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论