叫号机

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


主函数main.c

#include "linklist.h"  
#include <stdlib.h>  
#include <time.h>  
  
int main()  
{  
    char dbuffer [9];     
    char tbuffer [9];    
  
    _strdate( dbuffer );     
    printf( "当前日期   %s \n", dbuffer );   
      
    _strtime( tbuffer );     
    printf( "当前时间   %s \n", tbuffer );  
  
    int max1=50,max2=50;     //两个队伍人数上限为50  
  
    LinkList *L;   
    LinkList *V;     //建立头结点  
  
    InitList(L);   
    InitList(V);     //给头结点分配空间  
  
    int i,number1=1,number2=1;  
    for (;;)  
    {  
    printf ("欢迎光临烟台大学银行\n");  
    printf ("个人业务A按1         \n");  
    printf ("公司业务B按2         \n");  
    printf ("退号请按3           \n");  
    printf ("查看队伍中的人按4   \n");  
  
    scanf ("%d",&i);  
    system("cls");  
    if (i==1)  
    {  
        if (number1>max1)  
        {  
            printf ("\n对不起,队伍已经达到人数上限,请稍候再试\n\n");  
        }  
        else  
        {  
            if (add(L,number1))  
            {  
                number1++;  
            }  
  
        }  
    }  
    else if (i==2)  
    {  
        if (number2>max2)  
        {  
            printf ("\n对不起,队伍已经达到人数上限,请稍候再试\n\n");  
        }  
        else  
        {  
            add(V,number2);  
            number2++;  
        }  
  
    }  
    else if (i==3)  
    {  
        printf ("请输入您的队伍类型(A型请按1,B型请按2)\n");  
        int k;  
      
        scanf ("%d",&k);  
        system("cls");  
  
        if (k==1)  
        {  
            sub(L,&max1);  
        }  
        else if (k==2)  
        {  
            sub(V,&max2);  
        }  
        else   
        {  
            printf ("对不起您的输入有误!请重新输入\n\n");  
        }  
    }  
    else if (i==4)  
    {  
        printf ("当前队伍有:\n");  
        printf ("A:");  
        DispList(L);  
        printf ("B:");  
        DispList(V);  
        printf ("\n");  
    }  
        else   
        {  
            printf ("对不起您的输入有误!请重新输入\n\n");  
  
        }  
    }  
    return 0;  
}


* 版权所有 (C)2016,renjiafeng    
* 文件名称:   
* 文件标识:无     
* 内容摘要:叫号机操作系统    
* 其它说明:无     
* 当前版本: V1.0    
* 作 者:任家锋   
* 完成日期: 2016.12.28    
    
* 修改记录: 1    
* 修改日期: 2016.12.28    
* 版本号: V1.0     
* 修改人: 任家锋   
* 修改内容:创建  


头函数mine.h


void InitList(LinkList *&L);		//初始化链表
void DispList(LinkList *L);		//输出线性表
bool add(LinkList *&L,int number);	//号码入链
bool sub(LinkList *&L,int *max);	//删除号码


* 版权所有 (C)2016,renjiafeng    
* 文件名称:
* 文件标识:无     
* 内容摘要:叫号机操作系统    
* 其它说明:无     
* 当前版本: V1.0    
* 作 者:任家锋   
* 完成日期: 2016.12.28    
    
* 修改记录: 1    
* 修改日期: 2016.12.28    
* 版本号: V1.0     
* 修改人: 任家锋   
* 修改内容:创建  


源函数mine.c

* 版权所有 (C)2016,renjiafeng    
* 文件名称:   
* 文件标识:无     
* 内容摘要:叫号机操作系统    
* 其它说明:无     
* 当前版本: V1.0    
* 作 者:任家锋   
* 完成日期: 2016.12.28    
    
* 修改记录: 1    
* 修改日期: 2016.12.28    
* 版本号: 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,renjiafeng    
* 文件名称: 
* 文件标识:无     
* 内容摘要:叫号机操作系统    
* 其它说明:无     
* 当前版本: V1.0    
* 作 者:任家锋   
* 完成日期: 2016.12.28    
    
* 修改记录: 1    
* 修改日期: 2016.12.28    
* 版本号: V1.0     
* 修改人: 任家锋   
* 修改内容:创建

源函数LinkList.c

void CreateListF(LinkList *&L,ElemType a[],int n)//头插法建立单链表      
{      
    LinkList *s;      
    int i;      
    L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点      
    L->next=NULL;      
  
    for (i=0; i<n; i++)      
    {      
        s=(LinkList *)malloc(sizeof(LinkList));//创建新结点      
        s->data=a[i];      
        s->next=L->next;            //将*s插在原开始结点之前,头结点之后      
        L->next=s;      
    }      
}      
    
//尾插法建立单链表       
void CreateListR(LinkList *&L,ElemType a[],int n)   
{      
    LinkList *s,*r;  
      
    int i;      
    L=(LinkList *)malloc(sizeof(LinkList));    //创建头结点      
    L->next=NULL;      
    r=L;    //r始终指向终端结点,开始时指向头结点      
    for (i=0; i<n; i++)      
    {      
        s=(LinkList *)malloc(sizeof(LinkList));//创建新结点      
        s->data=a[i];      
        r->next=s;          //将*s插入*r之后      
        r=s;     
          
    }      
    r->next=NULL;            
 //终端结点next域置为NULL      
}      
     
void InitList(LinkList *&L)      
{      
    L=(LinkList *)malloc(sizeof(LinkList));      
 //创建头结点      
    L->next=NULL;    
      
}    
    
void DestroyList(LinkList *&L)  //销毁单链表        
{        
    LinkList *p=L,*q=p->next;   //p指向*q的前驱节点    
      
    while (q!=NULL)             //循环判断 逐个销毁        
    {        
        free(p);                //释放*p节点        
        p=q;                    //p、q同步后移一个节点        
        q=p->next;              //再赋值        
    }    
      
    free(p);    //此时q为NULL,p指向尾结点,释放它        
}   
       
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)    
{    
  LinkList *p=L->next;    
  while (p!=NULL)    
  {    
      printf("%d ",p->data);    
      p=p->next;    
  
  }    
  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;     
          
    }      
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值