c用餐管理系统----------文件链表相关操作 发表于 2019-04-22 更新于 2020-04-14 分类于 C 评论数: 阅读次数: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260#include"stdio.h"#include"string.h"#include"stdlib.h"#define MaxSize 20typedef 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; pfirst = 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);}///浏览文件*/复制觉得文章不错的话可以请我喝一杯茶哟~打赏微信支付支付宝本文作者: bestsort本文链接: https://bestsort.cn/2019/04/22/102/版权声明: 本博客所有文章除特别声明外,均采用 BY-SA 许可协议。转载请注明出处!并保留本声明。感谢您的阅读和支持!-------------本文结束感谢您的阅读-------------