《叫号机操作系统》-源代码

来源:互联网 发布:淘宝男模特排名 编辑:程序博客网 时间:2024/05/06 21:46
/***********************************************************  * 版权所有 (C)2016,wangxiuwen  * 文件名称: main.c  * 文件标识:无  * 内容摘要:叫号器操作系统 * 其它说明:无  * 当前版本: V1.0 * 作 者:王修文  * 完成日期: 2016.12.27  * 修改记录: 1 * 修改日期: 2016.12.27 * 版本号: V1.0  * 修改人: 王修文 * 修改内容:创建  **********************************************************/

主函数main.c

#include "LinkList.h"  #include "Mine.h"  /*提示:普通用户交款回执码统一默认为:1加急用户交款回执码统一默认为:2管理员密码默认为:1*/int main(){LinkList *L;    InitList(L);//初始化单链表int n;for (;;){index();//调用索引函数scanf("%d",&n);if (n==1)//普通挂号{ordinary(L);//调用相应函数}else if (n==2)//加急挂号{urgent(L);//调用相应函数}else if (n==3)//退号{back(L);//调用相应函数}else if (n==4)//管理员{administrator(L);//调用相应函数}else{break;}}return 0;}


/***********************************************************  * 版权所有 (C)2016,wangxiuwen  * 文件名称: mine.h  * 文件标识:无  * 内容摘要:叫号器操作系统 * 其它说明:无  * 当前版本: V1.0 * 作 者:王修文  * 完成日期: 2016.12.27  * 修改记录: 1 * 修改日期: 2016.12.27 * 版本号: V1.0  * 修改人: 王修文 * 修改内容:创建  **********************************************************/
头函数mine.h
#include <stdio.h>#include <windows.h>void index();//索引void index_();//管理员索引void ordinary(LinkList *L);//普通号void urgent(LinkList *L);//加急号void back(LinkList *L);//退号void administrator(LinkList *L);//管理员bool add1(LinkList *&L,int shenfen);//普通号入链bool add2(LinkList *&L,int shenfen);//加急号入链bool shenfen1(int a);//验证身份证号是否为4位数bool shenfen2(LinkList *&L,int a);//验证身份证号是否重复bool pay1();//普通号交款bool pay2();//加急号交款void sleep05();//延时0.5s清屏void sleep3();//延时3s清屏bool Aback(LinkList *&L);//普通号退号bool Tback(LinkList *&L);//加急号退号bool mima();//判断管理员密码


/***********************************************************  * 版权所有 (C)2016,wangxiuwen  * 文件名称: mine.c * 文件标识:无  * 内容摘要:叫号器操作系统 * 其它说明:无  * 当前版本: V1.0 * 作 者:王修文  * 完成日期: 2016.12.27  * 修改记录: 1 * 修改日期: 2016.12.27 * 版本号: V1.0  * 修改人: 王修文 * 修改内容:创建  **********************************************************/
源函数mine.c
#include "LinkList.h"  #include "mine.h"  int num1=1;//普通用户程序内部代号int num2=1;//加急用户程序内部代号//索引实现*********************************************************************************************************************************void index(){printf("欢迎光临烟台大学移动公司\n");printf("\n");printf("1、普通挂号\n");printf("2、加急挂号\n");printf("3、退号    \n");printf("4、管理员  \n");printf("任意键退出 \n");printf("请输入:");printf("\n");}//普通号实现*******************************************************************************************************************************void ordinary(LinkList *L){sleep05();printf ("请输入您的身份证号后四位:\n");int shenfen;scanf("%d",&shenfen);sleep05();if ( !shenfen1(shenfen) )//判断输入身份证号是否为4位{printf ("输入错误!请重新操作\n\n");sleep3();return;}if ( !shenfen2(L,shenfen) )//判断输入身份证号是否是否重复{printf ("该用户已在队伍中!请重新操作\n\n");sleep3();return;}if (!pay1())//判断是否交款成功{printf ("回执码错误!请重新操作\n\n");sleep3();return; }add1(L,shenfen) ;//加入链表队伍中printf ("********************");//输出用户信息printf("\n您的号码为:A%d 号\n",num1);int j=ListLength(L)-1;printf("您的前面有:%d 位用户\n",j); printf ("********************\n\n");sleep3();num1++;//下一个用户代号}//加急号实现*******************************************************************************************************************************void urgent(LinkList *L){sleep05();if(ListEmpty(L))//判断队伍是否需要开放加急号{printf ("您目前是第一位,请申请普通号!请重新操作\n\n");sleep3();return;}printf ("请输入您的身份证号后四位:\n");int shenfen;scanf("%d",&shenfen);sleep05();if ( !shenfen1(shenfen) )//判断输入身份证号是否为4位{printf ("输入错误!请重新操作\n\n");sleep3();return;}if ( !shenfen2(L,shenfen) )//判断输入身份证号是否是否重复{printf ("该用户已在队伍中!请重新操作\n\n");sleep3();return;}if (!pay2())//判断是否交款成功{printf ("回执码错误!请重新操作\n\n");sleep3();return; }add2(L,shenfen) ;//加入链表队伍中printf ("********************");//输出用户信息printf("\n您的号码为:T%d 号\n",num2);int j=num2-1;printf("您的前面有:%d 位用户\n",j); printf ("********************\n\n");sleep3();num2++;//下一个用户代号}//退号实现*********************************************************************************************************************************void back(LinkList *L){sleep05();char type;printf ("清输入您的号码类型(A/T):\n");scanf ("%s",&type);sleep05();if (type=='A')//调用普通号退号函数{if (Aback(L)){printf ("退号成功!请凭回执码 1 至取款处取款\n\n");sleep3();return;}else {return;}}else if (type=='T')//调用加急号退号函数{if (Tback(L)){printf ("退号成功!请凭回执码 2 至取款处取款\n\n");sleep3();return;}else {return;}}else {printf ("不存在该类型!请重新操作\n\n");sleep3();return; }}//管理员实现*******************************************************************************************************************************void administrator(LinkList *L){sleep05();while (!mima())//判断密码是否正确{return;}index_();int i;scanf ("%d",&i);sleep05();if (i==1)//请第一位客户{if (ListEmpty(L))//判断队伍中是否有人{printf("无人在等待!\n\n");    sleep3();}else//删除第一个用户信息{LinkList *p=L,*q;q=p->next;p->next=q->next;free (q);printf("屏幕显示:请第一位客户到人工窗口进行业务办理!\n\n");sleep3();}}else if (i==2)//查看队伍信息{if(ListEmpty(L)){printf ("当前队伍中的成员有:\n");printf ("\n0 人\n\n");sleep3();}else//显示队伍信息{printf ("当前队伍中的成员有:\n");printf ("\n");DispList(L);for (;;){int k;//固定队伍信息页面printf ("输入 1 跳转至首页面:\n");scanf ("%d",&k);while (k==1){sleep05();return ;}}}}else if (i==3)//清空队伍{DestroyList(L);printf ("操作成功!当前队伍已经为空\n\n");sleep3();}else//退出管理员系统{return;}}//普通号入链实现***************************************************************************************************************************bool add1(LinkList *&L,int shenfen)  {     LinkList *p=L,*s;  while (p->next!=NULL)//找到当前队伍中的最后一名{ p=p->next;  }      s=(LinkList *)malloc(sizeof(LinkList));     s->data=shenfen;  s->num=num1;s->type='A';    s->next=p->next;                            p->next=s;     return true;}//加急号入链实现***************************************************************************************************************************bool add2(LinkList *&L,int shenfen){LinkList *p=L,*s;  while (p->next->type=='T')//找到当前队伍中的最后一名{ p=p->next;  } s=(LinkList *)malloc(sizeof(LinkList));     s->data=shenfen;  s->num=num2;s->type='T';    s->next=p->next;                            p->next=s;     return true;}//检查身份证号是否正确且唯一***************************************************************************************************************bool shenfen1(int a){if (999<a&&a<10000)//检测输入的数是否为4位数{return true;}else {return false;}}//检查身份证号是否重复*********************************************************************************************************************bool shenfen2(LinkList *&L,int a){LinkList *p=L->next;while (p!=NULL)      {  if (p->data==a){return false;}else{p=p->next;  }    }return true;}//普通号交款*******************************************************************************************************************************bool pay1(){printf ("请至交款处交款5元,并输入交款回执号:\n");int k;scanf ("%d",&k);sleep05();if (k!=1){return false;}return true;}//加急号交款*******************************************************************************************************************************bool pay2(){printf ("请至交款处交款100元,并输入交款回执号:\n");int k;scanf ("%d",&k);sleep05();if (k!=2){return false;}return true;}//延时3s清屏*******************************************************************************************************************************void sleep3(){printf ("3秒后自动跳转至首页\n");Sleep (1000);printf ("2秒后自动跳转至首页\n");Sleep (1000);printf ("1秒后自动跳转至首页\n");Sleep (1000);/*Sleep (500);*/system("cls");}//延时0.5s清屏*****************************************************************************************************************************void sleep05(){printf ("处理中,请稍候\n");printf ("[");for (int j=0;j<35;j++){printf (">");Sleep (15);}printf ("]");Sleep (300);system("cls");}//普通号退号*******************************************************************************************************************************bool Aback(LinkList *&L){int i;printf ("请输入您的身份证号码后四位:\n");scanf ("%d",&i);sleep05();LinkList *q,*p=L;while ( p!=NULL && p->type!='A')//找到普通号第一位    {  q=p;        p=p->next;       } while (p!=NULL && p->data!=i)//找到该用户     {  q=p;        p=p->next;      } if (p==NULL)  {printf ("您输入的号码不存在!请重新操作\n\n");sleep3();return false;}else//实现退号{int j;printf ("请输入您的排队号码:\n");scanf ("%d",&j);if (p->num==j)//判断排队号与身份证号是否对应{sleep05();q->next=p->next;free(p);return true;  }else {sleep05();printf ("排队号码与身份证号不符!请重新操作\n\n");sleep3();return false;}}}//加急号退号*******************************************************************************************************************************bool Tback(LinkList *&L){int i;printf ("请输入您的身份证号码后四位:\n");scanf ("%d",&i);sleep05();LinkList *q,*p=L;while (p!=NULL && p->type!='T')//找到加急号第一位    {  q=p;        p=p->next;       } while (p!=NULL && p->data!=i)//找到该用户    {  q=p;        p=p->next;      } if (p==NULL)  {printf ("您输入的号码不存在!请重新操作\n\n");sleep3();return false;}else{int j;printf ("请输入您的排队号码:\n");scanf ("%d",&j);if (p->num==j)//判断排队号与身份证号是否对应{sleep05();q->next=p->next;free(p);return true;  }else {sleep05();printf ("排队号码与身份证号不符!请重新操作\n\n");sleep3();return false;}}}//管理员索引实现***************************************************************************************************************************void index_(){printf("1、有请当前队伍的第一位\n");printf("2、查看目前队伍信息\n");printf("3、清空队伍\n");printf("任意键退出\n");printf("请输入:");printf("\n");}//判断管理员密码是否正确*******************************************************************************************************************bool mima(){int i;printf ("请输入管理员密码:\n");scanf ("%d",&i);sleep05();if (i==1){return true;}else {printf ("密码输入错误!请重新操作\n\n");sleep3();return false;}}


/***********************************************************  * 版权所有 (C)2016,wangxiuwen  * 文件名称: LinkList.h  * 文件标识:无  * 内容摘要:叫号器操作系统 * 其它说明:无  * 当前版本: V1.0 * 作 者:王修文  * 完成日期: 2016.12.27  * 修改记录: 1 * 修改日期: 2016.12.27 * 版本号: V1.0  * 修改人: 王修文 * 修改内容:创建  **********************************************************/
头函数LinkList.h
#include <stdio.h>  #include <malloc.h>  typedef int ElemType;  typedef struct LNode        //定义单链表结点类型  {      ElemType data;  ElemType num;char type;    struct LNode *next;     //指向后继结点  }LinkList; void InitList(LinkList *&L);//初始化线性表  void DestroyList(LinkList *&L);//销毁线性表  bool ListEmpty(LinkList *L);//判断线性表是否为空  int ListLength(LinkList *L);//求线性表长度  void DispList(LinkList *L);//输出线性表  bool GetElem(LinkList *L,int i,ElemType &e);//求线性表某个数据元素值  int LocateElem(LinkList *L,ElemType e);//按元素值查找  bool ListInsert(LinkList *&L,int i,ElemType e);//插入数据元素  bool ListDelete(LinkList *&L,int i,ElemType &e);//删除数据元素  

/***********************************************************  * 版权所有 (C)2016,wangxiuwen  * 文件名称: LinkList.c  * 文件标识:无  * 内容摘要:叫号器操作系统 * 其它说明:无  * 当前版本: V1.0 * 作 者:王修文  * 完成日期: 2016.12.27  * 修改记录: 1 * 修改日期: 2016.12.27 * 版本号: V1.0  * 修改人: 王修文 * 修改内容:创建  **********************************************************/

源函数LinkList.c

#include "LinkList.h"   //初始化链表*******************************************************************************************************************************void InitList(LinkList *&L)  {      L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点 L->type ='T';    L->next=NULL;  }  //销毁单链表*******************************************************************************************************************************void DestroyList(LinkList *&L)     {    while (L->next==NULL){return ;}    LinkList *p=L->next ,*q=p->next;//p指向*q的前驱节点        while (q!=NULL)//循环判断 逐个销毁        {            free(p);//释放*p节点            p=q;//p、q同步后移一个节点            q=p->next;//再赋值        }        free(p);//此时q为NULL,p指向尾结点,释放它   L->next=NULL;} //判断链表是否为空*************************************************************************************************************************bool ListEmpty(LinkList *L)  {      return(L->next==NULL);  }  //求链表长度*******************************************************************************************************************************int ListLength(LinkList *L)  {      LinkList *p=L;      int i=0;      while (p->next!=NULL)      {          i++;          p=p->next;      }      return(i);  }  //输出链表*********************************************************************************************************************************void DispList(LinkList *L)  {  int i=1;    LinkList *p=L->next;      while (p!=NULL)      {          printf("第%d位:%d 号码:%c%d\n",i,p->data,p->type,p->num);          p=p->next;  i++;    }      printf("\n");  } //求链表中某个元素的值*********************************************************************************************************************bool GetElem(LinkList *L,int i,ElemType &e)  {      int j=0;      LinkList *p=L;      while (j<i && p!=NULL)      {          j++;          p=p->next;      }      if (p==NULL)            //不存在第i个数据结点          return false;      else                    //存在第i个数据结点      {          e=p->data;          return true;      }  }  //按元素查找*******************************************************************************************************************************int LocateElem(LinkList *L,ElemType e)  {      LinkList *p=L->next;      int n=1;      while (p!=NULL && p->data!=e)      {          p=p->next;          n++;      }      if (p==NULL)          return(0);      else          return(n);  }  //插入数据元素*****************************************************************************************************************************bool ListInsert(LinkList *&L,int i,ElemType e)  {      int j=0;      LinkList *p=L,*s;      while (j<i-1 && p!=NULL)//查找第i-1个结点      {          j++;          p=p->next;      }      if (p==NULL)//未找到位序为i-1的结点          return false;      else//找到位序为i-1的结点*p      {          s=(LinkList *)malloc(sizeof(LinkList)); //创建新结点*s          s->data=e;          s->next=p->next;                        //将*s插入到*p之后          p->next=s;          return true;      }  }  //删除数据元素*****************************************************************************************************************************bool ListDelete(LinkList *&L,int i,ElemType &e)  {      int j=0;      LinkList *p=L,*q;      while (j<i-1 && p!=NULL)    //查找第i-1个结点      {          j++;          p=p->next;      }      if (p==NULL)                //未找到位序为i-1的结点          return false;      else                        //找到位序为i-1的结点*p      {          q=p->next;              //q指向要删除的结点          if (q==NULL)              return false;       //若不存在第i个结点,返回false          e=q->data;          p->next=q->next;        //从单链表中删除*q结点          free(q);                //释放*q结点          return true;      }  }


运行过程截图:




1 0
原创粉丝点击