一个车位问题的程序设计,实在做不下去了求思路
#include<stdio.h>#include<stdilb.h>
#include<time.h>
#include<string.h>
#include<conoi.h>
struct time//----------------时间
{
int da,hr,min;
}
typedef struct paking
{
char cp[10];//------------------车牌
char qy[10];//------------------区域
char lx[10];//------------------类型
char bh[10];//------------------车位编号
struct time intime; //------------------------------进位时间
struct time outime; //------------------------------出位时间
}PAK;
char *pak_first,*pak_end;
char gsave;
void Add(void); //--------------------------------增加记录
void Del(void);//---------------------------------删除记录
void Find(void); //-------------------------------查询记录
void Modify(void); //-----------------------------修改记录
void Rate(void); //-------------------------------使用率计算
void Tongji(void); //-----------------------------统计使用时间
void Readdatav(void; //---------------------------读取记录
void Savedata(void); //---------------------------保存记录
PAK *findcp(char *cp); //------------------------------按车牌查找
PAK *findbh(char *bh); //------------------------------按编号查找
void diaplay(PAK *pak); //------------------------显示查找信息
void list(void);
void menu(); //-----------------------------------显示菜单
//主函数
int main(void)
{
pak.first=pak.end=NULL;
Readdata();
menu();
return 0;
}
//---------------------------------------------------------------------------------------读取信息
void Readata(void)
{
FILE *fp;
PAK *pak1;
fp=fopen("D:\\pak\\s.txt","rb");
if(!fP)
{
printf("cannot open file s.txt\n");
exit(1);
};
pak1=(PAK*)malloc(sizeof(PAK));
if(pak1=NULL)
{
printf("内存分配失败!\n");
getchar();
return;
}
fread(pak1,sizeof(pak),1,fp);
if(feof(fp)) break;
if(pak_first==NULL)
{
pak_first=pak1;
pak_end=pak1;
}
else
{
pak_end->next=pak1;
pak_end=pak1
}
pak_end->next=NULL;
fclose(fp);
}
//------------------------------------------------------------------显示主菜单
void menu()
{
char select;
system("cls");
do
{
printf(" The Paking Information System\n");
bound('_',30);
printf(" *******************************Menu**************************************");
printf(" * 1 input record 2 delete record *\n");
printf(" * 3 find record 4 modify record *\n");
printf(" * 5 rate record 6 tongji record *\n");
printf(" * 7 save record 8 display record *\n");
printf(" * 0 qiut record *\n");
printf("***************************************************************************");
bound('_',30);
printf("\n请选择菜单:");
fflush(stdin);
select=getchar();
system("cls");
switch(select)
{
case 1:Add();break;/*-----------------------------增加记录*/
case 2:Del();break;/*-----------------------------删除记录*/
case 3:Find();break;/*-----------------------------查询记录*/
case 4:Modify();break;/*--------------------------修改记录*/
case 5:Rate();break;/*----------------------------计算使用率*/
case 6:Tongji();break;/*--------------------------统计使用时间*/
case 7:Save();break;/*----------------------------保存记录*/
case 8:system(cls);Disp(1);break;/*----------------显示记录*/
case 0:Savedata();eixt(0);
default:Wrong();getchar();break;/*-----------------按键有误,必须为数值0~9*/
}
}while(1);
}
//---------------------------------------------------------------------------------------输入信息
void Add()
{
FILE *fp;
PAK *pak1;
int i=0;
char select='y';
if((fp=fopen("D:\\pak\\s.txt","ab")==NULL)
{
printf("打开文件出错!\n");
getchar();
return ;
}
do
{
i++;
pak1=(PAK*)malloc(sizeof(PAK));
if(pak1==NULL)
{
printf("内存分配失败,按任意键返回!\n");
getchar();
return;
}
bound('_',20);
printf("车牌号:");
scanf("%s",&pak1->cp);
printf("车位编号:");
scanf("%s",&pak1->bh);
printf("区域:");
scanf("%s",&pak1->qy);
printf("类型:");
scanf("%s",&pak1->lx);
printf("进位时间:");
scanf("%d/%d/%d",&pak1->intime);
printf("出位时间:");
scanf("%d/%d/%d",&pak1->outtime);
pak1->next=NULL;
if(pak_first==NULL);
{
pak_first=pak1;
pak_end=pak1;
}
else
{
pak_end->next=pak1;
pak_end=pak1;
}
fwrite(pak_end,sizeof(PAK),1,fp);
printf("\n");
bound('_',20);
printf("\n是否继续输入?(y/n)");
fflush(stdin);
select=getchar();
if(toupper(select)!='Y'||'y')
{
fclose(fp);
printf("\n输入完毕,任意键返回\n");
getchar();
return;
}
system("cls");
}while(1);
}
//---------------------------------------------------------------------------------------删除信息
void Del()
{
inti=0,find=0;
PAK *pak1,*pak2;
char cp[10],select;
system("cls");
printf("\n输入要删除的车牌:");
scanf("%s",cp);
pak1=pak_first;
pak2=pak1;
while(pak)
{
if(strcmp(pak1->cp,cp)==0)
{
find=1;
system("cls");
printf("车辆:%s信息如下:\n",emp1->name);
bound('_',25);
printf("车牌:%s\n",pak1->cp);
printf("车位编号:%s\n",pak1->bh);
printf("区域:%s\n",pak1->qy);
printf("类型:%s\n",pak1->lx);
printf("入位时间:%d/%d/%d\n",pak1->intime);
printf("出位时间:%d/%d/%d\n",pak1->outtime);
bound('_',25);
printf("真的要删除该员工的信息吗?(y/n)");
fflush(stdin);
select=getchar();
if(select!=y''&&select!='Y') return;
if(pak1==pak_first) emp_first=emp1->next;
else pak2->next=pak1->next;
free(pak1);
gsave=1;
Savedata();
return;
}
else
{
pak2=pak1;
pak1=pak1->next;
}
}
if(!find)
{
bound('_',30);
printf("未找到车牌为:%s的信息!\n",cp);
getch()
}
return;
}
//---------------------------------------------------------------------------------------查询信息
void Find()
{
int select,ret=0,num;
char str[10];
PAK *pak1;
system("cls");
do
{
printf("\t查询车位信息\n");
bound('_',25);
printf("\t1.按车牌查询\n");
printf("\t2.按车位编号查询\n");
printf("\t0.返回主菜单\n");
bound("\n请选择菜单;");
do
{
fflush(stdin);
select=getchar();
system("cls");
switch(select)
{
case '1':
printf("\n请输入要查询的车牌");
scanf("%s",str);
pak1=findcp(str);
display(pak,"车牌",str);
getch();
break;
case '2':
printf("\n请输入要查询的车位编号\n");
scanf("%s",str);
pak1=findbh(str);
display(pak,"车位编号",str);
getch();
break;
case '0':
ret=1;
break;
}
}while(select<'0'||select>'2');
system('cls');
if(ret) break;
}while(1);
}
PAK*findcp(char *cp)//按车牌查找
{
PAK *pak1;
pak1=pak_first;
while(pak1)
{
if(strcmp(cp,pak1->cp)==0) return pak1;
pak1=pak1->next;
}
return NULL;
}
PAK*findcp(char *bh)//按车位编号查找
{
PAK *pak1;
pak1=pak_first;
while(pak1)
{
if(strcmp(bh,pak1->bh)==0) return pak1;
pak1=pak1->next;
}
return NULL;
}
void display(PAK *pak)
{
if(pak)
{
printf("\n%s:%s信息如下:\n");
bound('_',20);
printf("车牌:%s\n",pak->cp);
printf("车位编号%s\n:",pak->bh);
printf("区域%s\n:",pak->qy);
printf("类型%s\n:",pak->lx);
printf("入位时间%d/%d/%d\n:",pak->intime);
printf("出位时间%d/%d/%d\n:",pak->outtime);
bound('_',20);
}
else
{
bound('_',40);
printf("系统中没有%s为:%s的车位信息');
}
return;
}
//-----------------------------------------------------------------列表显示信息
void list()
{
PAK *pak;
printf("\n车位信息列表:\n");
bound('_',25);
pak1=pak_first;
while(pak1)
{
printf("车牌:");
printf("车位编号:");
printf("区域:");
printf("类型:");
printf("入位时间:");
printf("出位时间:");
bound('_',25);
pak1=pak1->next;
}
printf("\n按任意键返回\n");
getch();
return;
}
//---------------------------------------------------------------------------------------修改信息
void Modify()
{
PAK *pak1;
char cp[10],*str;
int select;
printf("\n请输入要修改的车位编号;\n");
scanf("%s",&bh);
pak1=findbh(bh);
display(pak1,"车位编号",bh);
if(pak1)
{
printf("\n选择要修改的项目:\n");
bound("_",35);
printf(" 1 修改车牌号码 2 修改区域\n");
printf(" 3 修改类型 4 修改入位时间 \n");
printf(" 5 修改出位时间 0 返回 \n");
bound("_",35);
printf("请选择:");
do
{
fflush(stdin);
select=getchar();
switch(select)
{
case 1:
str=modi_field("车牌",pak1->cp,10);
if(str!=NULL)
{
strcpy(pak1->cp,str);
free(str);
}
break;
case 2:
str=modi_field("区域",pak1->qy,10);
if(str!=NULL)
{
strcpy(pak1->qy,str);
free(str);
}
break;
case 3:
str=modi_field("类型",pak1->lx,10);
if(str!=NULL)
{
strcpy(pak1->lx,str);
free(str);
}
break;
case 4:
case 5:
case 0: return;
}
}while("select<'0'||select>5");
}
}
//-----------------------修改车牌、区域、类型
char *modi_filed(char *field,char *s,int n)
{
char *str;
str=malloc(sizeof(char)*n);
if(str==NULL)
{
printf("内存分配失败,按任意键返回!\n");
getch();
return NULL;
}
printf("原%s:%s\n",field,s);
printf("修改为(不超过%d个字符):",n);
scanf("%s",str);
return str;
}
//修改时间????????????????????????????????????????????????????????????????????????????????????????????????????????????????
char modi_time(int t)
{
struct time
{
int da,hr,min;
}t;
printf("原时间:%d/%d/%d\n",t);
printf("新时间:");
scanf("%d\%d\%d",&t);
return t;
}
void Rate()???????????????????????????
{
}
void Tongji()?????????????????????????????????????????
{
}
//---------------------------------------------------------------------------------------保存信息
void Savedata()
{
FILE *fp;
PAK *pak1;
if(gsave==0) return;
if((fp=fopen("D:\\pak\\s.txt","wb"))==NULL)
{
printf("打开文件pak出错!\n");
getch();
return;
}
pak1=pak_first;
while(pak1)
{
fwrite(pak1,sizeof(PAK),1,fp);
pak1=pak1=->next;
}
gasve=0;
fclose (fp);
}
问题:车位的月使用率(时间30天);各车位的租用人使用率和临时使用率;所有车牌的每月使用时间;
求大神看看我写的代码,根基尚浅,敬请谅解!