目录

前言

1·设计目的

2·设计内容与要求

2·1·课题要求

3·设计思路

3·1 关键问题描述

3·2 解决方法

4·具体实现

总结


前言

这是之前在学习数据结构与算法的时候,写的疫苗预约管理系统;也可以作为参考供大家使用;当然很多功能都还没有加入,后面有时间会陆续更新;

1·设计目的

通过疫苗预约管理系统这项目,来测试自身对本学期所学的知识是否掌握牢靠。同时,培养我们自身综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,对我们自身实际工作能力的具体训练和考察过程。提高自身的独立思考能力和动手能力。

2·设计内容与要求

该项目的实现需要管理者输入注射点的信息,并不管是管理者还是个人都可以查询相应的注射点信息。管理者可以对每个注射点的信息进行更改。个人可以预约某个注射点某个星期进行打疫苗,可以取消预约信息。

2·1·课题要求

要求能对5个以上(暂时不超过100个)的疫苗注射点一周内的疫苗进行预约,系统首先可输入各个注射点一周内每天的疫苗数量,市民可查询每天剩余的名额,并进行预约,预约成功时(应判断无重复预约),给市民派发一个预约号。管理人员可查询各个注射点每天的预约人数,剩余疫苗数,可按某天的所有注射点的预约量从高到低排序。

3·设计思路

3·1 关键问题描述

a) 如何记录个人信息
b) 如何记录某个注射点的信息
c) 时间如何与注射点链接

3·2 解决方法

1·个人信息由链表记录,存储在结构体中;

//个人
typedef struct resident{char num1[19];//身份证号 char name[10];//名字 char address[20];//地址 int nmuber1;//已打针数 int number4;//预约号 }str2;typedef str2 ElementType;
typedef struct LNode *PtrToLNode;
2·注射点与时间,个人信息之间采用结构体嵌套方式连接,使得各个信息被引用;
struct LNode{ElementType Data;PtrToLNode Next;
}; //typedef PtrToLNode Position;
typedef PtrToLNode List;//注射点
struct Vaccination_point{int number;//疫苗总数 int renumber;//已预约人数;int maxnumber;//最大预约号;PtrToLNode e;
};struct Vaccination_point1{int num;//注射点的序号 char name[20];//注射点的名字struct Vaccination_point day[8];//某个星期
}str[100];

4·具体实现

1·初始化

List MaKeEmpty(){List L;L=(PtrToLNode)malloc(sizeof(struct LNode));L->Next=NULL;return L;
}

2·输入注射点和各天疫苗总数

void Input(int n){int i,j;for(i=0;i<n;i++){printf("请输入第%d个注射点名称:",i+1);scanf("%s",&str[i].name);for(j=1;j<=7;j++){printf("请输入第%d天的疫苗总数:",j);scanf("%d",&str[i].day[j].number);}}printf("\n"); printf("已有的注射点信息\n");for(i=0;i<n;i++){printf("注射点序号%d  名称%s\n",i+1,str[i].name);for(j=1;j<=7;j++){printf("星期%d的疫苗总数:%d ",j,str[i].day[j].number);printf("\n");}printf("\n");}
}

3·修改注射点的信息

void modify(int n){int i,j,k=1,nu1,ch,now;while(k!=0){printf("\t************************************************************************\n");printf("\t*                1--修改注射点名称                                     *\n");printf("\t*                2--修改某个星期的疫苗总数                             *\n");printf("\t*                0--退出                                               *\n");printf("\t************************************************************************\n");printf("请选择:\n");scanf("%d",&j);switch(j){case 1:{printf("请输入你要修改的注射点序号:\n");scanf("%d",&nu1);printf("请输入新的注射点名称:\n");scanf("%s",str[nu1-1].name);for(i=0;i<n;i++){printf("注射点序号%d  名称%s\n",i+1,str[i].name);for(j=1;j<=7;j++){                            printf("星期%d的疫苗总数:%d ",j,str[i].day[j].number);printf("\n");}printf("\n");}break;}case 2:{printf("请输入你要修改的注射点序号:\n");scanf("%d",&nu1);printf("请输入你要修改星期几的疫苗数:\n");scanf("%d",&ch);printf("请输入新的疫苗数:\n");scanf("%d",&now);str[nu1-1].day[ch].number=now;for(i=0;i<n;i++){printf("注射点序号%d  名称%s\n",i+1,str[i].name);for(j=1;j<=7;j++){                         printf("星期%d的疫苗总数:%d ",j,str[i].day[j].number);printf("\n");}printf("\n");}   break;}case 0:{k = 0;break;}}}
}

4·查询某注射点某天的剩余疫苗数量

void Find_Vaccines(int n){int i,j,day;char Address[18];printf("请输入你要查询的注射点名称以及第几天的疫苗数\n");scanf("%s %d",Address,&day);for(i=0;i<n;i++){if(strcmp(str[i].name,Address) == 0){for(j=1;j<=7;j++){if(day==j){printf("疫苗剩余量:%d\n",str[i].day[j].number-str[i].day[j].renumber);}}}}}

5·查询某天所有注射点的剩余疫苗数量

void FindVaccines(int n){int  i,j,day1,max,b,a[n]/*存储排序后的下标*/,flag[n]={0}/*标记*/;printf("请输入要查询的日期1~7):"); scanf("%d", &day1);for(i=0; i<n; i++){max=-1;//疫苗不可能为0,max=0不可取 for(j=0; j<n; j++)if(flag[j]==0 && str[j].day[day1].number-str[j].day[day1].renumber>max){max=str[j].day[day1].number-str[j].day[day1].renumber;b=j;}flag[b]=1;/*排序过就标记为1*/a[i]=b; /*将下标存入a[i]数组*/}for(i=0; i<n; i++){printf("%s %d ", str[a[i]].name , str[a[i]].day[day1].number-str[a[i]].day[day1].renumber);  }
}

6·个人预约

void Input2(int n){int i,j,day2;char add[19];List L;L=MaKeEmpty();PtrToLNode p;p=L;printf("请输入预约时间星期几(1~7):\n");scanf("%d",&day2);printf("请输入预约地址:\n");scanf("%s",add);for(i=0;i<n;i++){if(strcmp(str[i].name,add)==0){for(j=1;j<=7;j++)if(j==day2 && str[i].day[j].number-str[i].day[j].renumber>0){printf("请输入个人信息(按照身份证--姓名--地区--已打针数依次输入):\n");scanf("%s %s %s %d",p->Data.num1,p->Data.name,p->Data.address,&p->Data.nmuber1);p->Data.nmuber1++;str[i].day[j].renumber++;p->Data.number4=++str[i].day[j].maxnumber;//将个人信息的地址存入 p->Next=str[i].day[j].e;str[i].day[j].e=L;printf("预约成功\n"); return;//braek只结束内成循环return可以结束内成和外成 }}printf("疫苗已无,预约失败!\n");}
}

7·查询个人预约信息

void  Inquire_2(int n){int i,j;PtrToLNode a;char day1[19];printf("请输入你要查询的身份证号:\n");scanf("%s",day1);for(i=0;i<n;i++)for(j=1;j<=7;j++){a = str[i].day[j].e;while(a){if(strcmp(a->Data.num1,day1)==0){printf("身份证号:%s\n",a->Data.num1);printf("姓名:%s\n",a->Data.name);printf("社区:%s\n",a->Data.address);printf("预约号:%d\n",a->Data.number4);break;} a=a->Next;}}
}

8·取消个人预约

void Delete(int n){int i,j,add,day3;char addr[20];char na[19];PtrToLNode p;printf("请输入你要取消的注射点名称和日期(1~7)及你要取消的身份证号:\n");scanf("%s %d %s",addr,&day3,na);for(i=0;i<n;i++){if(strcmp(str[i].name,addr)==0){for(j=1;j<=7;j++){if(j==day3){if(strcmp(str[i].day[j].e->Data.num1,na)==0){p=str[i].day[j].e;str[i].day[j].e=str[i].day[j].e->Next;str[i].day[j].renumber--;free(p);printf("取消成功!\n");return; }}}}}}

主程序:

#include<stdio.h>
#include<string.h>
#include<malloc.h>#define YES 1
#define NO 2
#define ERROR NULL
#define MaxSize 50int count=0;
int flag=0;int main(){int n,j=1,chose;int c=1;while(j!=0){printf("\t**********************疫苗管理系统*******************************************\n");printf("\t*                 1--输入注射点名称和未来一个周各点疫苗总数                 *\n");printf("\t*                 2--查询某天注射点剩余的疫苗数量                           *\n");printf("\t*                 3--查询某天所有注射点的剩余疫苗数量                       *\n");printf("\t*                 4--个人预约                                               *\n");printf("\t*                 5--查询个人预约信息                                       *\n");printf("\t*                 6--取消个人预约                                           *\n");printf("\t*                 7--修改注射点名称某个星期疫苗数                           *\n");printf("\t*                 0--退出                                                   *\n");printf("\t*****************************************************************************\n");printf("请选择序号:");scanf("%d",&chose);switch(chose){case 1:{printf("请输入注射点个数:");scanf("%d",&n);Input(n);break;}case 2:{Find_Vaccines(n);break;}case 3:{FindVaccines(n);break;}case 4:{Input2(n);break;}case 5:{Inquire_2(n);break;}case 6:{Delete(n);break;}case 7:{modify( n);break;}case 0:{j=0;break;}}}
}

总结

这项目总体完成情况在管理者输入各注射点的一个星期的疫苗总数时还是很麻烦,时间复杂度和空间复杂度都还是很大,总体实现效果还是不错,能实现一些基本的操作。在进行该项目过程中,失败了很多次,一开始没有想到用多个结构体相互嵌套来实现一些信息存储和调用,一些函数的使用也没有记住,发现自己很多的不足。在实现个人信息存储时把链表定义位置错误,导致只可以存储一个人的信息,只有把它定义在预约里面才可以实现多个信息的存入。在写日期时,一开始打算用一个字符数字来储存后来,后面的操作很难实现,又改成用三个整形来存储,但是在后面实现查询某个星期的时候,又被卡,最后放弃日期具体时间,改用一个int类型来储存星期几。在取消个人预约信息时,并不知道该怎么操作,后来用一个指针去存储个人信息,然后直接free释放,来完成,删除。因为自己经常输出注射点的信息,所以新加一个修改操作,可以修改注射点的名称和某个星期的疫苗总数。

欢迎大家参考!!!

数据结构与算法--疫苗预约管理系统(C语言)相关推荐

  1. C语言疫苗预约管理系统

    C语言疫苗预约管理系统 一.疫苗预约管理 注:本题目所涉及的相关规定为虚拟情况,请勿代入现实生活中.实际规定请以政府权威部 门发布的信息为准. [功能描述] 要求能对5个以上(暂时不超过100个)的疫 ...

  2. 疫苗预约系统,疫苗预约管理系统,疫苗预约小程序系统设计与实现

    项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于web网页的疫苗预约系统,整个网站项目使用了B/S架构,基于python的Django框架下开发:管理员通过后台录入信息.管理信息,设置网站 ...

  3. 疫苗预约系统,疫苗接种管理系统,疫苗预约管理系统毕设作品

    项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于web网页的疫情疫苗预约系统,整个网站项目使用了B/S架构,基于java的springboot框架下开发:管理员通过后台录入信息.管理信息, ...

  4. 疫苗预约管理系统,疫苗预约系统,新冠疫苗预约系统毕业设计作品

    项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于web网页的新冠疫苗预约系统,整个网站项目使用了B/S架构,基于java的springboot框架下开发::通过后台设置医院信息.录入医院科 ...

  5. 数据结构与算法入门教程(C语言实现版)

    个人简介 作者是一个来自河源的大三在校生,以下笔记都是作者自学之路的一些浅薄经验,如有错误请指正,将来会不断的完善笔记,帮助更多的Java爱好者入门. 文章目录 个人简介 C语言数据结构与算法 BF和 ...

  6. 数据结构和算法文章目录(C语言 唐发根版)

    笔者花费一年的时间,呕心沥血,重新学习了一遍大学的<数据结构和算法>课程,整理了34篇博客文章. 本专题涉及概述.线性表.数组.堆栈和队列.树和二叉树.图.文件及查找.排序算法等八个模块, ...

  7. 疫苗预约管理系统——课程设计

    先发布一下测试版,大家发现有bug可以提出来,最近期末了,要忙着复习.考完试,我再发完整版,写下思路.教程什么的吧. 这个程序接口定义有点多,个人感觉代码有些多,有点复杂了,不容易看懂. #inclu ...

  8. c语言大作业教室预约管理系统,C语言程序设计——教室管理系统(源代码))

    C语言程序设计--教室管理系统(源代码) 非常有用的. #include #include #include #define szSTR 64 #define fileDB "c:\\con ...

  9. 数据结构排序算法之归并排序(c语言实现)

    博主身为大二萌新,第一次学习数据结构,自学到排序的时候,对于书上各种各样的排序算法顿觉眼花缭乱,便花了很长的时间尽力把每一个算法都看懂,但限于水平有限,可能还是理解较浅,于是便将它们逐个地整理实现出来 ...

  10. 数据结构——插入排序算法详解(C语言)

    插入排序的算法思想是:每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适合位置上,直到所有待排序记录全部插入为止. 例如,打扑克牌在抓牌时,每抓一张牌,就插入到合适的位置,直到抓 ...

最新文章

  1. Scala for循环示例
  2. 微信第三方开发者该何去何从?
  3. vue中 mock使用教程
  4. .NET 5 的重大改变:消失的历史技术
  5. 常量指针与指针常量的区别(转帖)
  6. 《论可计算数及其在判定上的应用》简单理解
  7. 64位操作系统上ArcGIS Server Manager页面不正常显示
  8. 【clickhouse】clickhouse kafka 引擎常见问题
  9. 远程使用plsql登陆数据库时,界面提示 ORA-12170 TNS 连接超时
  10. Mac/Linux 安装ab(Apache Benchmark)
  11. 明日之后服务器维修公告维修,《明日之后》排队问题维护进度公告
  12. 计算机在汽车专业中的应用,浅谈计算机技术在汽车行业中的应用.doc
  13. 行测测评(二)——图形找规律技巧
  14. ArcGIS干货教程:DEM数字高程模型数据的生成
  15. AES解密类,解密案例 解决No matching distribution found for Crypto
  16. 钉钉与wcp集成通知【原创】
  17. k8s join 集群报错之error execution phase kubelet-start: error uploading crisocket:
  18. php mysql 变量赋值_mysql存储过程中变量的定义赋值操作
  19. EI从投稿到录用一般得多久?
  20. 群晖 mysql 端口配置,如何连接群晖里的MYSQL数据库

热门文章

  1. 26201-32-1,酞甧氧钛(TiOPC)钛氧酞菁(TiOPc)
  2. python适合做网站吗_python做网站有什么弊端文章伪原创的注意事项
  3. 完整的Servlet+jsp+PageModel分页
  4. visual studio 2015中使用opencv时遇到的一些问题
  5. html跳转页面到自己写的另一个页面,非js
  6. 完全的新手入门_使用Unity做个单机二人小麻将(二) 吃碰杠胡牌算法
  7. 在使用罗技g304鼠标的时候滚轮失灵怎么解决
  8. Telos 核心开发团队 进度报告
  9. uniapp开发的多端影视APP 对接的苹果CMS
  10. EtherCAT ESI文件中Imagedata16X14图像的编辑