求助.关于c语言创建一个简单的信息管理系统.急~~~
- C/C++ code
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>#include<conio.h>int peo;struct info_type{ char name[20]; char time[20]; char room[20]; int number[100]; float price[20]; float day[20]; float discount[20]; float income[20];}client[peo];//输入函数部分void enter() { struct info_type.client[peo]; printf("输入人数\n:"); scanf("%d",&peo); int j; char c[2]; FILE *fp; if((fp=fopen("data.txt","w"))==NULL) //以写的方式打开,并判断是否将文件读完 { printf("不能打开文件!\n"); exit(0); } for(j=0;j<peo;j++) { fwrite(&client[j],sizeof(struct info_type),1,fp); //数据块输出函数,用于将数据输出到磁盘文件中 } while(1) { printf("请输入顾客姓名:\n"); scanf("%s",client[peo].name); printf("请输入入住时间:\n"); scanf("%s",client[peo].time); printf("请输入住宿房间:\n"); scanf("%s",client[peo].room); printf("请输入顾客数量:\n"); scanf("%d",client[peo].number); printf("请输入每日价格:\n"); scanf("%f",client[peo].price); printf("请输入住宿天数:\n"); scanf("%f",client[peo].day); printf("请输入每日折扣率:\n"); scanf("%f",client[peo].discount); printf("请输入应实收的金额:\n"); scanf("%f",client[peo].income); if(fwrite(&client[peo++],sizeof(struct info_type),1,fp)!=1) printf("文件读入错误!\n"); else printf("成功!\n"); printf("是否要继续输入?( 是[y]/否[n]) \n"); scanf("%s",c); if(strcmp(c,"n")==0)break; } fclose(fp);}//修改部分void change(struct info_type.client[]);{ int i,j; printf("请输入要修改的信息的顾客姓名:\n"); scanf("%s",client[peo].name); while(client[j].name!=client[i].name) { j++; } printf("请输入要修改的信息的顾客姓名、入住时间、住宿房间、顾客数量、每日价格、住宿天数、折扣率、实收金额\n"); scanf("%s%s%s%d%f%f%f%f",client[i].name,client[i].time,client[i].room,&client[i].number,&client[i].price,&client[i].day,&client[i].discount,&client[i].income); printf("修改成功\n"); printf("按任意键退出\n"); getchar();}//删除部分int del(struct info_type.client[],int a);{ int i,j; i=0; printf("请输入要删除的信息的顾客房间号:\n"); scanf("%d",client[j].room); while(client[j].room!=client[i].room) { i++; } for(i;i<a-1;i++); { client[i].room=client[i+1].room; }return a-1; }void menu()//菜单函数{ printf(" *1----------------输入住宿结帐信息*\n"); printf(" *2----------------修改住宿结帐信息*\n"); printf(" *3----------------删除住宿结帐信息*\n"); printf(" *4----------------查找住宿结帐信息*\n"); printf(" *5----------------住宿结帐信息排序*\n"); printf(" *6----------------显示住宿结帐信息*\n"); printf(" *7----------------统计住宿结帐信息*\n"); printf(" *0----------------退出住宿管理系统*\n"); printf("请选您需要的服务:\n");}void main() { int sel,a; printf(" ***********************************\n"); Sleep(1000);// 执行挂起一段时间 printf(" 欢迎进入住宿结帐系统 \n" ); Sleep(1000); printf(" ***********************************\n"); Sleep(1000); //菜单显示 printf(" *1----------------输入住宿结帐信息*\n"); Sleep(1000); printf(" *2----------------修改住宿结帐信息*\n"); Sleep(1000); printf(" *3----------------删除住宿结帐信息*\n"); Sleep(1000); printf(" *4----------------查找住宿结帐信息*\n"); Sleep(1000); printf(" *5----------------住宿结帐信息排序*\n"); Sleep(1000); printf(" *6----------------显示住宿结帐信息*\n"); Sleep(1000); printf(" *7----------------统计住宿结帐信息*\n"); Sleep(1000); printf(" *0----------------退出住宿管理系统*\n"); Sleep(1000); printf("请选您需要的服务:\n"); scanf("%d",&sel);//扫描键盘 switch(sel)//选择菜单 { case 1:printf("请选择输入方式:\n"); printf(" ***********************************\n"); printf(" *****11---------------文件操作*****\n"); printf(" *****12---------------键盘操作*****\n"); printf(" *****10-------------返回主菜单*****\n"); printf(" ***********************************\n"); scanf("%d",&a); switch(a) { case 10:menu(); } break; case 2: printf(" ***********************************\n"); printf(" *****确认修改请输入1*****\n"); printf(" *****取消修改请输入0*****\n"); printf(" ***********************************\n"); scanf("%d",&a);//扫描键盘 break; case 3: printf(" ***********************************\n"); printf(" *****确认删除请输入1*****\n"); printf(" *****取消删除请输入0*****\n"); printf(" ***********************************\n"); break; case 4: printf(" ***********************************\n"); printf(" **41---------------按住宿天数查询**\n"); printf(" **42---------------按住宿房间查询**\n"); printf(" **40-------------------返回主菜单**\n"); printf(" ***********************************\n"); break; case 5: printf(" ***********************************\n"); printf(" **51---------------按顾客姓名排序**\n"); printf(" **52---------------按入住时间排序**\n"); printf(" **53---------------按住宿房间排序**\n"); printf(" **54---------------按顾客数量排序**\n"); printf(" **55---------------按每日价格排序**\n"); printf(" **56-----------------按折扣率排序**\n"); printf(" **56---------------按实收金额排序**\n"); printf(" **50-------------------返回主菜单**\n"); printf(" ***********************************\n"); break; case 6:printf("请输入顾客姓名:\n"); break; case 7: printf(" ***********************************\n"); printf(" **71-------------------按收入统计**\n"); printf(" **72-----------------按空房数统计**\n"); printf(" **73---------------按住宿人数统计**\n"); printf(" **70-------------------返回主菜单**\n"); printf(" ***********************************\n"); break; case 0:(exit(1));break; };}
[解决办法]
[Quote=引用:]
引用:
1.你是想建立结构体数组吧?但是你的peo没赋值啊,这样数组的维数不能确定.
2.你是想动态建立数组是吧?但是c99标准没有这功能,你可以用动态内存分配,比如malloc函数
例
int *p=(int *)malloc(sizeof(int)*m);
其中m就是这个数组的大小,当然m的值是可以你自己输入的。另外指针和数组本来就是等……
[/Quote
不是链表啊,实际上就是建立一个数组,不过是用指针表示数组首地址而已
struct info_type.client[peo];
printf("输入人数\n:");
scanf("%d",&peo);
这个地方你不是想输入人数吗?这样不行,因为上面定义结构体数组的时候peo的值不可以不确定!