停车场:
头文件:
#ifndef _parking_h
#define _parking_h
#include<stdio.h>
#include<stdlib.h>
#define SUCCESS 1111
#define FAILURE 2222
#define TRUE 3333 //没什么用QAQ
#define FALSE 4444 //同上
#define SIZE_1 3 //停车场先只停3辆车玩玩
#define SIZE_2 9 //候车场先只等9辆车也是玩玩
/* 停车场结构体
作者:张琦
时间:18.8.13 / 19:00
*/
struct ParkingStark
{
int *num;
long *time_1;
long *time_2;
int top;
};
typedef struct ParkingStark PS; //命名为PS
/* 空栈结构体
作者:张琦
时间:18.8.13 / 19:00
*/
struct EmptyStack
{
int *num;
long *time_1;
long *time_2;
int top;
};
typedef struct EmptyStack ES; //命名为ES
/* 候车场队列
作者:张琦
时间:18.8.13 / 19:01
*/
struct WaitingYard
{
int *num;
long *time_1;
int front;
int rear;
};
typedef struct WaitingYard WY; //命名为WY
//定义三个结构体指针。
PS *car_parking;
ES *car_exchange;
WY *car_waiting;
//全局申明 停车场初始化
int ParkingStackInit(PS **p);
//全局申明 空栈初始化
int EmptyStackInit(ES **e);
//全局申明 候车场初始化
int WaitingYardInit(WY** w);
//主界面
void mainmenu();
//停车场停车
int ParkingStackPush(PS *p);
//候车场停车
int WaitingYardPush(WY* w,PS* p);
//出车
int POP(PS *p, ES *e, WY *w );
//停车场的遍历
int ParkingStackTraverse(PS *p );
//候车场的遍历
int WaitingYardTraverse(WY* w );
//候车场车辆计数
int WaitingYardNumber(WY *w);
//按车牌号搜索
int Search( PS *p, WY *w );
#endif
功能函数:
#include"parking.h"
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<unistd.h>
int ParkingStackInit(PS **p)
{
(*p) = (PS*)malloc(sizeof(PS));
if( NULL == (*p) )
{
return FAILURE;
}
(*p) -> top = -1;
// num
(*p) ->num = (int*)malloc(sizeof(int)*SIZE_1);
if( NULL == ((*p)->num) )
{
return FAILURE;
}
//time1
(*p)->time_1 = (long int*)malloc(sizeof(long int)*SIZE_1);
if( NULL == ((*p)->time_1) )
{
return FAILURE;
}
//time2
(*p)->time_2 = (long int*)malloc(sizeof(long int)*SIZE_1);
if( NULL == ((*p)->time_2) )
{
return FAILURE;
}
return SUCCESS;
}
int EmptyStackInit(ES **e)
{
(*e) = (ES*)malloc(sizeof(ES));
if( NULL == (*e) )
{
return FAILURE;
}
(*e) -> top = -1;
// num
(*e) ->num = (int*)malloc(sizeof(int)*SIZE_1);
if( NULL == ((*e)->num) )
{
return FAILURE;
}
//time1
(*e)->time_1 = (long int*)malloc(sizeof(long int)*SIZE_1);
if( NULL == ((*e)->time_1) )
{
return FAILURE;
}
//time2
(*e)->time_2 = (long int*)malloc(sizeof(long int)*SIZE_1);
if( NULL == ((*e)->time_2) )
{
return FAILURE;
}
return SUCCESS;
}
int WaitingYardInit(WY** w)
{
(*w) = (WY*)malloc(sizeof(WY));
if( NULL == (*w))
{
return FAILURE;
}
(*w)->num = (int*)malloc(sizeof(int)*SIZE_2);
if( NULL == ((*w)->num) )
{
return FAILURE;
}
(*w)->time_1 = (long int*)malloc(sizeof(long int)*SIZE_2);
if( NULL == ((*w)->time_1))
{
return FAILURE;
}
(*w)->front = (*w)->rear = 0;
return SUCCESS;
}
void mainmenu()
{
printf("*****************************************************************\n");
printf("*****************************************************************\n");
printf("** welcome! *******\n");
printf("*****************************************************************\n");
printf("** TIPs:请选择功能 : ******\n");
printf("** 1.录入车辆信息 2.记录出车信息 *****\n");
printf("** 3.查看停车场中车辆信息 4.查看候车场中信息 ****\n");
printf("** 5.正在等待入场的车辆数目 6.按车牌查询车辆信息***\n");
printf("** 7.退出使用 **\n");
printf("*****************************************************************\n");
printf("*****************************************************************\n");
}
/*
功能:往停车场里停车
作者:张琦
时间:18.8.13 / 19:45
*/
int ParkingStackPush(PS *p)
{
int choice;//用于做选择
int choice_2;
if( NULL == p ) //入参判断
{
return FAILURE;
}
while( p->top < SIZE_1 )
{
if( p->top == SIZE_1 - 1 )
{
printf("停车场已满!\n");
printf("是否要登记车辆进入候车场中?\n选择: 1(是) , 2(否)\n");
scanf("%d",&choice);
if( 1 == choice )
{
WaitingYardPush( car_waiting , car_parking );
}
else
{
break;
}
}
else
{
printf("请输入车牌号码:\n");
scanf("%d",&p->num[p->top + 1]);
//设置进入停车场的时间
time_t t_in;
time (&t_in);
//获取进入时间
char *t_get = (char*)malloc(sizeof(char)*64);
t_get = ctime ( &t_in );
p->time_1[p->top + 1] = t_in;
printf("此车牌照为%d,进入的时间为:%s\n",p->num[p->top + 1],t_get);
p->top ++;
printf("是否继续停车?\n请选择: 1(是) , 2(否)\n");
scanf("%d",&choice_2);
if( 1 == choice_2 )
{
continue;
}
else if ( 2 == choice_2 )
{
break;
}
else
{
printf("ERROR!\n");
}
}
}
return SUCCESS;
}
/*
功能:往候车场里停车
作者:张琦
时间:18.8.13 / 19:48
*/
int WaitingYardPush(WY* w,PS* p)
{
int choice; //用于做选择
if( NULL == w || NULL == p ) // 入参判断
{
return FAILURE;
}
while( p->top >= SIZE_1 - 1 )
{
printf("请输入进入候车区的牌照:\n");
scanf("%d",&w->num[w->rear]);
//设置进入候车场的时间
time_t t_in;
time(&t_in);
//获取进入候车场的时间
long t = t_in;
char *t_get = (char*)malloc(sizeof(char)*64);
t_get = ctime( &t_in );
w->time_1[w->rear] = t;
printf("牌照为:%d的车辆进入候车区,时间为%s\n",w->num[w->rear],t_get);
w->rear ++;
printf("是否继续入车?\n选择: 1(是) ,2(否)\n");
scanf("%d",&choice);
if( 2 == choice )
{
break;
}
else if( 1 == choice )
{
continue;
}
else
{
printf("ERROR!\n");
}
}
return SUCCESS;
}
/*
功能:出车
作者:张琦
时间: 18.8.13 / 20:51
*/
int POP(PS *p, ES *e, WY *w )
{
int choice;
//入参判断
if( NULL == p || NULL == e || NULL == w )
{
return FAILURE;
}
//用于存放需要出停车场的车牌号
int code;
//用于判断是否找到
int find = 0;
printf("请输入需要出停车场的车牌号:\n");
scanf("%d",&code);
int k = 0;
int i = 0;
while( (p->top) > -1 )
{
if( p->num[p->top] == code )
{
if( p->top == -1 )
{
return FAILURE;
}
time_t t_in;
time(&t_in);
//用于标记离开停车场的时间
p->time_2[0] = t_in;
char *t_get;
//用于获取离开停车场的时间
t_get = ctime( &t_in );
printf("车牌号为:%d的车辆\n在%s时出场,在停车场中停留了%.2f分钟\n",
p->num[p->top],t_get,( difftime(p->time_2[0],p->time_1[p->top]) ) / 60);
p->top --;
find += 1;
break;
}
e->num[e->top + 1] = p->num[p->top];
e->time_1[e->top + 1] = p->time_1[p->top];
e->time_2[e->top + 1] = p->time_2[p->top];
p->top --;
e->top ++;
k++;
}
if( 0 == find )
{
printf("查无此车\n");
}
while( (e->top) > -1 )
{
p->num[p->top + 1] = e->num[e->top];
p->time_1[p->top + 1] = e->time_1[e->top];
p->time_2[p->top + 1] = e->time_2[e->top];
e->top --;
p->top ++;
}
//如果停车场没有满时 从候车场转车进停车场
while( (p->top) < (SIZE_1 - 1) )
{
if( (p->top) > (SIZE_1 - 1) )
{
return FAILURE;
break;
}
//如果候车场没有车辆时
if( w->front == w->rear )
{
break;
}
printf("是否有车辆将要进入停车场?\n 1.(是) , 2(否) \n");
scanf("%d",&choice);
if( 1 == choice )
{
ParkingStackPush(car_parking);
}
else if( 2 == choice )
{
break;
}
else
{
printf("ERROR!\n");
}
i = w->num[w->front];
w->front = ( w->front + 1 ) % 100;
}
return SUCCESS;
}
/*
功能:停车场的遍历
作者:张琦
时间:18.8.13 / 21: 07
*/
int ParkingStackTraverse( PS *p )
{
if( NULL == p )
{
return FAILURE;
}
//判断一下停车场里是否有车
if( p->top == -1 )
{
printf("空的停车场!\n");
}
int i;
while( i < p->top + 1 )
{
printf("车牌号为:%d 进场的时间为%s\n",p->num[i],ctime(&(p->time_1[i])));
i++;
}
return SUCCESS;
}
/*
功能:候车场的遍历
作者:张琦
时间:18.8.13 / 21: 21
*/
int WaitingYardTraverse(WY *w)
{
if( w->rear == w->front )
{
printf("候车场查无车辆!\n");
}
if( NULL == w )
{
return FAILURE;
}
int i ;
i = ( w->rear - w->front + 100 ) % 100;
int j;
j = w->front;
while( j < w->rear )
{
printf("候车场的车辆信息为:\n");
printf("车牌号:%d 进场时间: %s\n",w->num[j],ctime(& (w->time_1[j])));
j++;
}
return SUCCESS;
}
/*
功能:候车场数量计数
作者:张琦
时间:18.8.14 / 8:48
*/
int WaitingYardNumber(WY *w)
{
if( NULL == w )
{
return FAILURE;
}
//如果候车场没有车辆时
if( w->front == w->rear )
{
printf("候车场里没有车辆!\n");
}
int count;
count = ( w->rear - w->front + 100 ) % 100;
printf("候车场一共有%d辆车\n",count);
return SUCCESS;
}
/*
功能:按车牌号查询车辆
作者:张琦
时间:18.8.14 / 10:53
*/
int Search( PS *p, WY *w )
{
if( NULL == p || NULL == w )
{
return FAILURE;
}
int num;
printf("请输入你要搜寻的车牌号\n");
scanf("%d",&num);
int count;
int i = 0;
while( i < p->top + 1)
{
if( p-> top == -1 )
{
printf("停车场为空\n");
sleep(1);
return FAILURE;
}
if( num == p->num[i] )
{
printf("已在停车场中找到此车\n");
printf("车牌号为:%d 进场的时间为%s\n",p->num[i],ctime(&(p->time_1[i])));
count ++;
i++;
break;
}
else
{
printf("停车场中没有这辆车\n");
break;
}
}
int j = 0;
while( j < w->rear )
{
if( w->front == w->rear )
{
printf("候车场为空\n");
sleep(1);
return FAILURE;
}
if( num == w->num[j] )
{
printf("已在候车场找到此车\n");
printf("车牌号:%d 进场时间: %s\n",w->num[j],ctime(& (w->time_1[j])));
count ++;
j++;
break;
}
else
{
printf("候车场中没有这辆车\n");
break;
}
}
return SUCCESS;
}
主函数:
#include"parking.h"
#include<stdio.h>
#include<stdlib.h>
int main()
{
int ret;
int choice;
//停车场初始化
ret = ParkingStackInit(&car_parking);
if( FAILURE == ret )
{
printf("parkingstack init failure!\n");
}
else if ( SUCCESS == ret )
{
printf("parkingstack init success!\n");
}
//空栈初始化
ret = EmptyStackInit(&car_exchange);
if( FAILURE == ret )
{
printf("emptystack init failure!\n");
}
else if ( SUCCESS == ret )
{
printf("emptystack init success!\n");
}
//候车场初始化
ret = WaitingYardInit(&car_waiting);
if( FAILURE == ret )
{
printf("waitingyard init failure!\n");
}
else if( SUCCESS == ret )
{
printf("waitingyard init success!\n");
}
system("clear");
while(1)
{
mainmenu();
printf("请输入你要选择的功能: ");
scanf("%d",&choice);
switch(choice)
{
case 1:
system("clear");
ret = ParkingStackPush(car_parking);
if( FAILURE == ret )
{
printf("录入信息失败!\n");
}
else if( SUCCESS == ret )
{
printf("成功录入信息!\n");
}
break;
case 2:
system("clear");
ret = POP(car_parking,car_exchange,car_waiting);
if( FAILURE == ret )
{
printf("出车失败了!\n");
}
else if( SUCCESS == ret )
{
printf("成功!\n");
}
break;
case 3:
system("clear");
ret = ParkingStackTraverse(car_parking);
if( FAILURE == ret )
{
printf("查看失败了!\n");
}
else if( SUCCESS == ret )
{
printf("查看车辆信息成功!\n");
}
break;
case 4:
system("clear");
ret = WaitingYardTraverse(car_waiting);
if( FAILURE == ret )
{
printf("查看候车信息失败了!\n");
}
else if( SUCCESS == ret )
{
printf("查看候车信息成功!\n");
}
break;
case 5:
system("clear");
ret = WaitingYardNumber(car_waiting);
if( FAILURE == ret )
{
printf("统计失败!\n");
}
else if( SUCCESS == ret )
{
printf("统计成功!\n");
}
break;
case 6:
system("clear");
ret = Search(car_parking,car_waiting);
if( SUCCESS == ret )
{
printf("完成\n");
}
else if( FAILURE == ret )
{
printf("未完成\n");
}
break;
case 7:
exit(0);
}
}
return 0;
}
通讯录 v3.0
头文件:
#ifndef _addresslist_h
#define _addresslist_h
#define SUCCESS 1234
#define FAILURE 2345
#define SIZE 50
struct addresslist
{
int num;
char name[30];
char sex[10];
char tel[15];
char address[30];
struct addresslist *next;
};
typedef struct addresslist list;
int addresslistInit(list **l);
int print();
void menu();
int addinfo(list *l,int n);
int display(list *l);
int listdelete(list *l,int p,int *s_num,char *s_nam,char *s_sex,char *s_tel,char *s_add);
int listrevise(list *l);
int listfind(list *l);
int addresslistsave(list *l);
int addresslistopen(list *l);
#endif
功能函数:
#include<stdio.h>
#include"addresslist.h"
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
void menu()
{
//system("clear");
printf("\n\n\n***************************\n");
printf("1.显示通讯录 2.增加联系人 \n");
printf("3.删除联系人 4.修改联系人 \n");
printf("5.查找联系人 7.保存通讯录 \n");
printf("8.读取通讯录 9.退出 \n");
}
int addresslistInit(list **l)
{
*l = (list*)malloc(sizeof(list)*1);
if( NULL == *l)
{
return FAILURE;
}
(*l)->next = NULL;
return SUCCESS;
}
int addinfo(list *l,int n)
{
list *p = l,*q;
q = (list*)malloc(sizeof(list)*1);
int k = 1;
if( NULL == l)
{
return FAILURE;
}
while ( k < n && p != NULL)
{
p = p->next;
k++;
}
if( k > n && NULL == p)
{
return FAILURE;
}
printf("plz input number:\n");
int a;
scanf("%d",&a);
q ->num = a;
printf("plz input name:(input 'bye' will quit )\n");
char name[30]={0};
scanf("%s",name);
if( strcmp( name, "bye" ) == 0)
{
return 1;
}
else
{
strcpy( q->name , name);
}
printf("plz input sex:\n");
char sex[10]={0};
scanf("%s",sex);
strcpy(q->sex , sex);
printf("plz input tel:\n");
char tel[15]={0};
scanf("%s",tel);
strcpy(q->tel , tel);
printf("plz input address:\n");
char address[30]={0};
scanf("%s",address);
strcpy(q->address , address);
q ->next = p->next;
p ->next = q;
return SUCCESS;
}
int display(list *l)
{
if( NULL == l)
{
return FAILURE;
}
int s_sort;
printf("请选择:\n按序号输出:1\n按姓名首字母输出:2\n");
scanf("%d",&s_sort);
list* q = l;
if( 1 == s_sort )
{
while( q->next )
{
q = q->next;
printf("序号:%d\n",q->num);
printf("姓名:%s\n",q->name);
printf("性别:%s\n",q->sex);
printf("电话:%s\n",q->tel);
printf("地址:%s\n",q->address);
printf("\n");
}
printf("\n");
return SUCCESS;
}
else if ( 2 == s_sort )
{
list *p = l;
list *new_q = l;
char sort_tmp[30] = {0};
for( q = l; q != NULL ; q = q->next )
{
for( p = q->next; p != NULL ; p = p->next)
{
if( strncmp (q ->name,p ->name,10) > 0)
{
strcpy(sort_tmp , p ->name);
strcpy(p ->name , q ->name);
strcpy(q ->name , sort_tmp);
}
}
}
while( new_q->next )
{
new_q = new_q->next;
printf("序号:%d\n",new_q->num);
printf("姓名:%s\n",new_q->name);
printf("性别:%s\n",new_q->sex);
printf("电话:%s\n",new_q->tel);
printf("地址:%s\n",new_q->address);
printf("\n");
}
printf("\n");
}
return SUCCESS;
}
int listdelete(list *l,int p,int *s_num,char *s_nam,char *s_sex,char *s_tel,char *s_add)
{
if( NULL == l)
{
return FAILURE;
}
int k = 1;
list* q = l;
list* n;//用于先保存要删除的指针地址
while ( k < p )
{
q = q->next;
k++;
}
//循环结束时, k必然等于n
if( k > p || NULL == q)
{
return FAILURE;
}
n = q -> next; //先把 要被删除的地址存入n
*s_num = n->num;
s_nam = n->name;
s_sex = n->sex;
s_tel = n->tel;
s_add = n->address;
q ->next = n -> next; //将指针指向下下个地址
free ( n ) ; //释放掉被删除原先的地址
return SUCCESS;
}
int listrevise(list *l)
{
if( NULL == l)
{
return FAILURE;
}
list *p = l;
int i = 1,n;
printf("请输入想要被修改的序号:\n");
scanf("%d",&n);
while( i < n+1 )
{
p = p ->next;
i++;
}
if( NULL == p)
{
return FAILURE;
}
else
{
printf("姓名:\n");
scanf("%s",p ->name);
printf("性别:\n");
scanf("%s",p ->sex);
printf("电话:\n");
scanf("%s",p ->tel);
printf("地址:\n");
scanf("%s",p ->address);
}
return SUCCESS;
}
int listfind(list *l)
{
if( NULL == l )
{
return FAILURE;
}
printf("按姓名查找: 1\n按电话查找: 2\n按地址查找: 3\n");
char s_tmp[30] = {0};
list* q = l;
int location = 0;
int s_searchnumber;
scanf("%d",&s_searchnumber);
if( 1 == s_searchnumber )
{
printf("请输入一个姓名:\n");
scanf("%s",s_tmp);
while( q )
{
q = q->next;
location++;
if ( strcmp(q->name,s_tmp) == 0 )
{
return location;
}
else
{
return FAILURE;
}
}
//return FAILURE;
}
if( 2 == s_searchnumber )
{
printf("请输入一个电话:\n");
scanf("%s",s_tmp);
while( q )
{
q = q->next;
location++;
if ( strcmp(q->tel,s_tmp) == 0 )
{
return location;
}
else
{
return FAILURE;
}
}
//return FAILURE;
}
if( 3 == s_searchnumber)
{
printf("请输入一个地址:\n");
scanf("%s",s_tmp);
while( q )
{
q = q->next;
location++;
if ( strcmp(q->address,s_tmp) == 0 )
{
return location;
}
else
{
return FAILURE;
}
}
}
return FAILURE;
}
int addresslistsave(list *l)
{
FILE *fp = fopen("addresslist.txt","w+");
if( NULL == fp )
{
perror("fopen");
exit(1);
}
list *p = l;
while( p->next )
{
p = p->next;
fwrite( p, sizeof( *p ), 1, fp);
}
fseek( fp, 0, SEEK_SET);
fclose( fp );
return SUCCESS;
}
int addresslistopen(list *l)
{
if( NULL == l )
{
return FAILURE;
}
list *p = l;
FILE *fp;
fp = fopen("addresslist.txt","r");
if ( NULL == fp )
{
perror("fopen");
exit(1);
}
int ret;
while(1)
{
list *q = (list*)malloc(sizeof(list));
ret = fread( q, sizeof(*q), 1, fp );
if( -1 == ret )
{
perror("fread");
exit(1);
}
if( 0 == ret )
{
break;
}
q->next = p->next;
p->next = q;
p = p->next;
}
//ftruncate(fp,0);
fseek( fp, 0, SEEK_SET );
fclose( fp );
return SUCCESS;
}
主函数:
#include<stdio.h>
#include"addresslist.h"
#include<stdlib.h>
#include<unistd.h>
/*
void print()
{
list *q = head;
printf("序号:%d\n",q->num);
printf("姓名:%s\n",q->name);
printf("性别:%s\n",q->sex);
printf("电话:%s\n",q->tel);
printf("地址:%s\n",q->address);
printf("\n");
}
*/
void welcome()
{
system("clear");
printf("\n\n\n******************************\n");
printf("********欢迎打开通讯录***********\n");
printf("*********************************\n");
sleep(2);
}
int main()
{
list *head = NULL;
int c,ret,i;
//int y = 2;
int d_p;
int s_num;
char s_nam[30] = {0};
char s_sex[10]={0};
char s_tel[15]={0};
char s_add[30]={0};
ret = addresslistInit(&head);
if( ret == SUCCESS)
{
printf("Init success!\n");
}
else if( FAILURE == ret)
{
printf("Init failure!\n");
}
welcome();
while (1)
{
menu();
scanf("%d",&c);
switch(c)
{
case 1:ret = display(head);
if( FAILURE == ret )
{
printf("display failure!\n");
}
if( SUCCESS == ret )
{
printf("display success!\n");
}
break;
case 2:
for( i = 0; i < SIZE ; i++)
{
ret = addinfo(head,i+1);
if( FAILURE == ret)
{
printf("insrt failure!\n");
}
else if ( SUCCESS == ret )
{
printf("insrt success!\n");
}
else if ( 1 == ret )
{
break;
}
}
break;
case 3: printf("请输入要删除的序号:\n");
scanf("%d",&d_p);
ret = listdelete(head,d_p,&s_num,s_nam,s_sex,s_tel,s_add);
if( FAILURE == ret)
{
printf("detele failure!\n");
}
else
{
printf("detele success!\n");
}
break;
case 4: ret = listrevise(head);
if( SUCCESS == ret )
{
printf("revise success!\n");
}
else if ( FAILURE == ret )
{
printf("revise failure!\n");
}
break;
case 5: ret = listfind(head);
if( FAILURE == ret )
{
printf("not existed!\n");
}
else
{
printf("已找到!\n而且他的序号是 %d\n",ret);
}
break;
case 7: ret = addresslistsave(head);
if( SUCCESS == ret )
{
printf("保存成功!\n");
}
else if( FAILURE == ret )
{
printf("保存失败!\n");
}
break;
case 8:ret = addresslistopen(head);
if( SUCCESS == ret )
{
printf("打开成功!\n");
}
else if( FAILURE == ret )
{
printf("打开失败!\n");
}
break;
case 9:
exit(0);
}
}
return 0;
}