c用餐管理系统----------文件链表相关操作
2018-03-07 09:40
369 查看
#include"stdio.h" #include"string.h" #include"stdlib.h" #define MaxSize 20 typedef struct guest_info { char name[8]; int sum; char time[10]; int number; struct guest_info * next; } GuestLink,* Pointer; void Insert(Pointer * Head); void Search(Pointer Head ); void Update(Pointer Head); void Delete(Pointer * Head); void Show(Pointer Head); Pointer Sort(Pointer );///排序 void Storage(Pointer ); ///储存 Pointer ReadFile();///浏览文件 int main() { Pointer Head=NULL; int i; do { printf("\n"); printf("1---插入(Insert)\n"); printf("2---查询(Search)\n"); printf("3---修改(Update)\n"); printf("4---删除-(Delete)\n"); printf("5---显示(Show)\n"); printf("6---退出(Exit)\n"); printf("7---排序(Sort)\n"); printf("8---录入文件(Storage)\n"); printf("9---读取数据(ReadFile)\n"); scanf("%d",&i); switch(i) { case 1: Insert(&Head); break; case 2: Search(Head); break; case 3: Update(Head); break; case 4: Delete(&Head); break; case 5: Show(Head); break; case 6: break; case 7: Head = Sort(Head); break; case 8: Storage(Head); break; case 9: Head = ReadFile(); Show(Head); break; default: printf("错误选择!请重选"); break; } } while(i!=6); return 0; } void Insert(Pointer * Head) { int in_number; Pointer p,q,r; printf("请输入编号:"); scanf("%d",&in_number); p=q=* Head; while(p!=NULL) { if(p->number==in_number) { printf("已经有相同的编号:"); return; } else { q=p; p=p->next; } } r=(Pointer)malloc(sizeof(GuestLink)); r->next=NULL; if(r==NULL) { printf("分配空间失败!"); return; } if(q==NULL) * Head=r; else { q->next=r; } r-> number=in_number; printf("请输入姓名:"); scanf("%s",r->name); printf("请输入人数:"); scanf("%d", &r->sum); printf("请输入用餐时间:"); scanf("%s", r->time); } void Search(Pointer Head) { int flag=1; int number; Pointer p; printf("请输入要查询的编号:"); scanf("%d", &number); p=Head; while(p!=NULL&&flag) { if(p->number==number) { printf("姓名:%s",p->name); printf("人数:%d",p->sum); printf("用餐时间:%s",p->time); flag=0; } else p=p->next; } if(flag) printf("没有查询到!!"); } void Update(Pointer Head) { int flag=1; int number; Pointer p; printf("请输入要修改的编号:"); scanf("%d",&number); p=Head; while(p!=NULL&&flag) { if(p->number==number) { printf("请输入人数:"); scanf("%d",p->sum); printf("请输入用餐时间:"); scanf("%s",p->time); flag=0; } else p=p->next; } if(flag) printf("没有找到要修改的记录!!"); } void Delete(Pointer *Head) { int flag=1; int number; Pointer p,q; printf("请输入要删除数据的编号"); scanf("%d",&number); p=q=* Head; while(p!=NULL&&flag) { if(p->number==number) { if(p==* Head) { *Head=p->next; free(p); } else { q->next=p->next; free(p); } flag=0; } else { q=p; p=p->next; } } if(flag) printf("没有找到可以删除的数据!!"); } void Show(Pointer Head) { Pointer p; p=Head; while(p!=NULL) { printf("姓名: %-10s",p->name); printf("人数: %-10d",p->sum); printf("用餐时间: %-10s",p->time); printf("编号: %-10d\n",p->number); p=p->next; } } Pointer Sort(Pointer Head) { Pointer pfirst,ptail,pminBefore,pmin,p; pfi a167 rst = NULL; while(Head!=NULL) { for (p = Head, pmin = Head; p->next != NULL; p = p->next) { if(strcmp(p->next->time,pmin->time) < 0) { pminBefore = p; pmin = p->next; } } if(pfirst == NULL) { pfirst = pmin; ptail = pmin; } else { ptail->next = pmin; ptail = pmin; } if(pmin == Head) Head = Head->next; else pminBefore->next = pmin->next; } if(pfirst != NULL) ptail->next = NULL; Head = pfirst; return Head; } void Storage(Pointer Head) { ///储存 Pointer cur; cur = Head; FILE *fp = fp = fopen( "学生信息.txt", "w" ); while(cur != NULL){ fprintf(fp, "%s\t%d\t%s\t%d\n", cur->name,cur->sum,cur->time,cur->number); cur = cur->next; } fclose(fp); } Pointer ReadFile() { char name[8]; int sum; Pointer r,s; Pointer first; first = (Pointer)malloc(sizeof(GuestLink)); r = first; first->next = NULL; char time[10]; int number; FILE* fp; fp = fopen("学生信息.txt", "r"); while(1) { fscanf(fp, "%s%d%s%d",name,&sum,time,&number); if(feof(fp)) break; s=(Pointer)malloc(sizeof(GuestLink)); strcpy(s->name,name); s->sum = sum; strcpy(s->time,time); s->number = number; r->next = s; r = s; } r->next = NULL; return first->next; fclose(fp); } ///浏览文件*/
相关文章推荐
- 【C语言】指针、链表的原理和各类操作相关心得以及学生信息管理系统的改写报告
- 使用C++结合文件操作和链表实现学生成绩管理系统
- 指针、链表的原理和各类操作相关心得以及学生信息管理系统
- C链表和文件操作实战--图书管理系统
- 指针、链表的原理和各类操作相关心得以及学生信息管理系统
- 链表文件结构体操作例子(员工信息管理系统)
- Linux学习记录--文件IO操作相关系统编程
- Android入门之文件系统操作(二)文件操作相关指令
- [linux]历程管理,内存管理,文件系统,系统管理,网络操作概述
- lab 相关--使用vb.net实现对控制文件的管理操作
- rhel6文件系统属性更改相关操作
- 2011年11月28日——进程管理,内存管理,文件系统,系统管理,网络操作概述
- 链表实现学生管理系统 -文件 4000 的储存与读入-2018年春课程设计
- c语言学生信息管理系统(链表、文件)
- shell学习:Linux系统日志的相关命令、文件和管理工具
- 数据结构——链表操作(电话管理系统 )
- Android入门之文件系统操作(二)文件操作相关指令
- php学习基础-文件系统(三) 文件夹的相关操作、php文件上传、php文件下载
- C实现通讯录管理系统(亮点:纯链表实现、子串匹配,文件读写)
- 与文件管理相关的系统调用 lseek fstat stat lstat