基于C语言链表实现的订餐系统

Inyoumeheat

发布日期: 2019-05-22 22:23:28 浏览量: 551
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

1、课程设计简介

1.1 要求

参加本课程设计的学生,应当认真完成本课程设计的全部过程。并以最终课程设计成果来证明其独立完成各种实际任务的能力。从而,反映出理解和运用本课程知识的水平和能力。

1.2 意义和目的

意义

C语言是电子科学与技术专业的重要专业基础课。在很多后续课程中,都要使用到C语言。

学生通过对C语言的学习,已经具备了使用C语言编写简单的应用程序的能力。为了加强程序设计基础,开设课程设计课,使学生对C语言有更全面的理解,进一步提高运用C语言编程解决实际问题的能力,同时,为后续课程的学习夯实基础。

目的

  • 提高用程序设计解决实际问题的能力

  • 通过提出算法、指定输入输出来设计一个解决方案

  • 用C语言合理地开发两个简洁有效的程序代码来实现该设计

  • 测试程序是否工作且满足设计指标并评价其效率

1.3 内容

链表操作题(包括建立、插入、删除、打印等)(参考教材);

2、具体实现

2.1 程序总体方案

2.1.1 程序设计思想

通过在主函数循环调用各个函数,从而实现对链表的连续操作,最终实现链表的新建、打印、查找、保存、读取、更新、删除等等操作,进而管理订单与用户信息,并保存用户的各种信息,方便下一次操作。链表是以订单号排序,当出现订单号相同时会有提示,并结束本次操作,成功实现一个订单号对应一个客户。

2.1.2 程序结构或流程图

2.2 改进方案

2.2.1 改进一

2.2.1.1 改进方案

刚开始链表是按插入顺序进行排列的,搜索时的时候也没有按序号检索,总体看起来很乱。所以,在增加、修改等需要增加新的客户信息的时候,调用按订单号排序的函数,这样打印的时候就显得很工整,有条理。

2.2.1.2 具体实现

  1. void Insert(Pointer *Head)
  2. {
  3. int in_number;
  4. Pointer p,q,r;
  5. p=q=*Head;
  6. printf("请输入号码:");
  7. scanf("%d",&in_number);
  8. while(p!=NULL)
  9. {
  10. if(in_number==p->number)
  11. {
  12. printf("已存在号码!");
  13. }
  14. else
  15. {
  16. q=p;
  17. p=p->next;
  18. }
  19. }
  20. r=(Pointer)malloc(sizeof GuestLink);
  21. r->next=NULL;
  22. if(q==NULL)
  23. *Head=r;
  24. else
  25. q->next=r;
  26. printf("请输入姓名:");
  27. scanf("%s",r->name);
  28. printf("请输入人数");
  29. scanf("%f",&r->sum);
  30. printf("请输入时间");
  31. scanf("%s",r->time);
  32. }

2.2.2 改进二

2.2.2.1 改进方案

一开始没有建立数据的时候,是无法提取数据的,而要是在开头的时候先提取数据的话,就会出现读不到数据,然后指针Head不为NULL,而接下来的操作就会出现问题。所以,在无法找到数据的时候,我们就返回一个指针Head=NULL,这样,头指针还是指向空函数,说明我们没有成功读取数据,或者未保存任何数据信息。这样在接下来的操作就不会出错了。

2.2.2.2 具体实现

  1. void Insert(Pointer *Head)
  2. {
  3. int in_number;
  4. Pointer p,q,r;
  5. printf("请输入编号:\n");
  6. scanf("%d",&in_number);
  7. p=q=*Head;
  8. while(p!=NULL)
  9. {
  10. if(p->number==in_number)
  11. {
  12. printf("已经有相同编号:");
  13. return;
  14. }
  15. else
  16. {
  17. q=p;p=p->next;
  18. }
  19. }
  20. r=(Pointer)malloc(sizeof(GuestLink));//没有*号
  21. r->next=NULL;
  22. if(r==NULL)
  23. {
  24. printf("分配空间失败");
  25. return;
  26. }
  27. if(q==NULL)//如果是空表,判断空表用q!!!!
  28. *Head=r;
  29. else
  30. {
  31. q->next=r;
  32. }
  33. r->number=in_number;
  34. printf("请输入姓名:\n");
  35. scanf("%s",r->name);
  36. printf("请输入人数:\n");
  37. scanf("%d",&r->sum);
  38. printf("请输入时间:\n");
  39. scanf("%s",r->time);
  40. }

2.2.3 改进三

Nothing ORZ…

2.2.3.1 改进方案

当我们建立链表的时候是把链表数据保存在内存里面,而删除之类操作内存还没有被释放,这样会增加电脑的内存占用,同时会增加能量的电脑能量消耗,这样不利于电脑的稳定工作,且浪费资源,这时我们就需要把那些没用的链表内存释放了。通过free(*p)函数实现对内存的释放。

2.2.3.2 具体实现

删除一个订单只需要

  1. void Delete(Pointer *Head)
  2. {
  3. int flag=1;
  4. int number;
  5. Pointer p,q;
  6. printf("请输入要删除的数据编号:");
  7. scanf("%d",&number);
  8. p=q=*Head;
  9. while(p!=NULL&&flag)
  10. {
  11. if(p->number==number)
  12. {
  13. if(p==*Head)
  14. {
  15. *Head=p->next;free(p);//删除结点后要及时释放内存!!!
  16. }
  17. else
  18. {
  19. q->next=p->next;
  20. free(p);
  21. }
  22. flag=0;
  23. }
  24. else
  25. {
  26. q=p;
  27. p=p->next;
  28. }
  29. }
  30. if(flag)
  31. printf("没有找到可以删除的数据!!");
  32. }

2.2.3.3 实现效果

添加订餐客户信息

按照客户时间升序排序

保存到文件

查看文件信息

3、总体小结

链表题考察了我们对于链表知识的理解,要求熟练掌握链表的建立,结点的插入,查找,删除,输出等方法。所以,着重复习了书本中关于链表的知识,以便能够更加好的完成程序。通过上一次课程设计的锻炼,对于本次课程设计的要求和内容偶遇了更加深的理解。通过本次课程设计,对链表的知识也有了进一步的掌握和理解。刚开始不够细心,在调试过程中遇到的问题,通过及时的查找书籍寻找答案,并根据所学知识,理清思路去解决,不断完善程序。在设计过程中,不断的通过与同学交流、上网找资料、查阅书籍等等方法,克服每一个难题,并与同学在讨论中增加了相互感情,扩大了自己的知识面,让一些以前不知道的,或者更加实用的方法得以用在自己的程序代码上。

通过这次课程设计,我了解到编程并不是那么的容易,也并不是那么多难,关键是需要有:

  • 编程习惯

  • 对算法的认知能力

  • 语言掌握能力

除了对编程能力的认识外,我还知道了,C语言并不是那么的难,关键是看你怎样去了解代码,使用代码,让自己的程序更加的完善,对资源的利用更加的充分。

4、参考文献

[1] 陈显刚.c语言程序设计[M].北京:北京理工大学出版社,2007.

[2] 谭浩强.c语言程序设计[M].北京:清华大学出版社,1998.

[3] 徐新华.c语言程序设计教程[M].北京:中国水利水电出版社,2001.

[4] 伍一,等.c语言程序设计与实训教程[M].北京:清华大学出版社,2007.

[5] 徐翠霞. c语言程序设计案例教程[M].北京:北京大学出版社,2008.

[6] 徐卓群等.数据结构,高等教育出版社,1987.

[7] 陈小平.数据结构导论,经济科学出版社.2000.

上传的附件 cloud_download 基于C语言链表实现的订餐系统.7z ( 180.01kb, 5次下载 )
error_outline 下载需要7点积分

发送私信

那些让你睡不着的心事,都会变成天上的星星

8
文章数
6
评论数
最近文章
eject