设计一个信息管理系统,系统可以完成:
- 对房屋信息的“输入”、“查询”、“删除”、“显示”、“添加”、“排序”、“修改”、“统计”。
- 系统的登入、退出、密码重置。
功能描述:
1.输入
根据提示信息依次输入“楼号”“类型”“面积”“费用”“住户名”,输入完成键入回车显示“创建成功!”,数据写入文本文件“E:\\test.txt”。
2.查询
选择是否继续查询,否则返回菜单,是则进入查询,输入提示需要查询的楼号,输入完成键入回车显示所查询到的信息。
3.删除
选择是否继续删除,否则返回菜单,是则进入删除,输入提示需要删除的信息对应的住户名以进行查找,找到后删除对应信息,显示“删除成功!”,将更改后的所有信息写入文本文件。
4.显示
系统按格式打印当前文本文件中存在的所有信息,随后可以选择返回主菜单或退出系统。
5.添加
根据提示信息依次输入“楼号”“类型”“面积”“费用”“住户名”,输入完成键入回车显示“创建成功!”,数据写入文本文件。
6.排序
选择需要的排序方式,系统按格式打印排序完成的房屋信息。
7.修改
输入需要修改的信息对应的住户名,以住户名进行查找,查找到后根据提示输入需要修改的信息种类,再输入更改的信息,键入回车显示“修改成功!”,数据写入文本文件。
8.统计
显示当前文件中总房屋数、其中公寓数、其中别墅数。
9.登入
共有4次输入正确登入密码的机会,输入正确进入开始欢迎界面,若不正确则显示剩余输入机会次数,若四次均不正确则自动退出系统。
10.密码设置
输入需要修改为的密码,随后再输入确认密码,若两次输入相同则显示“修改成功”,否则显示“修改失败”,返回菜单
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define NUM_HOUSE 100
struct House
{
int bn; //楼号
char bt[20]; //类型
int ba; //面积
long be; //费用
char owner[20]; //住户
}house[NUM_HOUSE];
int n=0;
char password_rewrite[30];
void log_in(); //登入界面
void start(); //开始界面
void menu(); //菜单
void selsct_objects(); //功能选项
void input(); //信息录入
void sort_method(); //选择排序方法
void sort_be(); //按费用排序
void sort_bn(); //按楼号排序
void del(); //信息删除
void modify(); //信息修改
void search_method(); //选择查询方式
void search_bn(); //按楼号查询
void search_owner(); //按住户名查询
void add(); //信息添加
void display(); //所有信息显示
void sum(); //信息统计
void password_setting(); //登入密码设置
void main();
void main()
{
system("color f0");
log_in();
int n = 0;
start();
getch();
menu();
}
void log_in()
{
FILE*fp=fopen("E:\\password.txt","at+");
fscanf(fp,"%s",password_rewrite);
fclose(fp);
int times=0;
char password[30];
char correct_pw[30]={123};
printf("\n\n\n\n\n\t\t\t\t请输入密码:\n");
scanf("%s",password);
if(strcmp(password,password_rewrite)!=0)
{
printf("密码错误!\n");
for(times=3;times>0;times--)
{
if((times>0)&&(strcmp(password,password_rewrite)!=0))
{
printf("\n您还有%d次输入机会!\n",times);
//scanf("%s",password);
scanf("%s",password);
}
}
if((times==0)&&(strcmp(password,password_rewrite)!=0))
{
exit(0);
}
}
}
void start()
{
system("cls");
printf("\n\n\n\n\n\n\n\n");
printf("\t\t\t************************************************");
printf("\n\n");
printf("\t\t\t*****************欢迎使用本系统*****************");
printf("\n\n");
printf("\t\t\t************************************************");
printf("\n\n");
printf("\t\t\t\t ***按任意键进入***\n");
}
void menu()
{
int n;
system("cls");
printf("\n\n\n\n\n\n\n\n");
printf("\t\t***************************************\n\n");
printf("\t\t***************** 菜单 **************\n\n");
printf(" 1 [输入]房屋信息 \n\n");
printf(" 2 [查询]房屋信息 \n\n");
printf(" 3 [删除]房屋信息 \n\n");
printf(" 4 [显示]房屋信息 \n\n");
printf(" 5 [添加]房屋信息 \n\n");
printf(" 6 [排序]房屋信息 \n\n");
printf(" 7 [修改]房屋信息 \n\n");
printf(" 8 [统计]房屋信息 \n\n");
printf(" 9 [密码设置] \n\n");
printf(" 0 [退出系统] \n\n");
printf("\t\t***************************************\n\n");
scanf("%d", &n);
switch (n)
{
case 1:input(); break;
case 2:search_method(); break;
case 3:del(); break;
case 4:display(); break;
case 5:add(); break;
case 6:sort_method(); break;
case 7:modify(); break;
case 8:sum();break;
case 0:exit(0); break;
case 9:password_setting();break;
default:break;
}
}
void input()
{
int i, m;
int len = 0;
system("cls");
printf("\n\n输入需要录入的房屋信息个数(1-100):\n");
scanf("%d",&m);
FILE* fp;
fp = fopen("E:\\test.txt", "at+");
for(i=0;i<m;i++)
{
printf("\n\n请分别输入楼号 类型 面积 费用 住户名 \n\n");
printf("\n请输入楼号:\n");
scanf("%d", &(house[i].bn));
getchar();
printf("\n请输入类型:(公寓/别墅)\n");
gets(house[i].bt);
printf("\n请输入面积(m^2):\n");
scanf("%d", &(house[i].ba));
getchar();
printf("\n请输入费用(w):\n");
scanf("%d", &(house[i].be));
getchar();
printf("\n请输入住户名:\n");
gets(house[i].owner);
fprintf(fp, "%d %s %d %ld %s\n", house[i].bn,house[i].bt,house[i].ba,house[i].be,house[i].owner);
printf(">>%d %s %d %ld %s<<\n",house[i].bn,house[i].bt,house[i].ba,house[i].be,house[i].owner);
n++;
}
printf("\n创建成功!\n");
system("pause");
fclose(fp);
menu();
}
void search_bn()
{
int n;
system("cls");
printf("\n\n按1继续查询,按0返回主菜单\n");
scanf("%d", &n);
if (n == 0)
{
menu();
}
else
{
printf("输入错误!");
system("pause");
}
int number,i=0;
FILE *fp=fopen("E:\\test.txt","at+");
while((i<NUM_HOUSE)&&(fscanf(fp, "%d %s %d %ld %s\n", &house[i].bn,house[i].bt,&house[i].ba,&house[i].be,house[i].owner)!=EOF))
{
i++;
}
n=i;
fclose(fp);
system("cls");
printf("-----------------------------------------------------------------------\n");
printf("\n 楼号 类型 面积(m^2) 费用(w) 住户\n\n");
printf("-----------------------------------------------------------------------\n");
printf("请输入需要查询的楼号");
scanf("%d",&number);
for(i=0;i<n;i++)
{
if(number==house[i].bn)
{
printf(" %-12d %-12s %-12d %-12ld %-12s\n",house[i].bn,house[i].bt,house[i].ba,house[i].be,house[i].owner);
}
}
system("pause");
menu();
}
void search_owner()
{
int n;
system("cls");
printf("\n\n按1继续查询,按0返回主菜单\n");
scanf("%d", &n);
if (n == 0)
{
menu();
}
int i=0;
char owner[20];
FILE *fp=fopen("E:\\test.txt","at+");
while((i<NUM_HOUSE)&&(fscanf(fp, "%d %s %d %ld %s\n", &house[i].bn,house[i].bt,&house[i].ba,&house[i].be,house[i].owner)!=EOF))
{
i++;
}
n=i;
fclose(fp);
system("cls");
printf("-----------------------------------------------------------------------\n");
printf("\n 楼号 类型 面积(m^2) 费用(w) 住户\n\n");
printf("-----------------------------------------------------------------------\n");
printf("请输入需要查询的住户名");
scanf("%s",owner);
for(i=0;i<n;i++)
{
if(strcmp(owner,house[i].owner)==0)
{
printf(" %-12d %-12s %-12d %-12ld %-12s\n",house[i].bn,house[i].bt,house[i].ba,house[i].be,house[i].owner);
}
}
system("pause");
menu();
}
void search_method()
{
char m[20];
system("cls");
printf("输入需要查询的类型:(楼号/住户名)\n");
scanf("%s",m);
if (strcmp(m,"楼号")==0)
{
search_bn();
}
if (strcmp(m,"住户名")==0)
{
search_owner();
}
}
void display()
{
int linenum = 0,q,i=0;
FILE *fp=fopen("E:\\test.txt","at+");
while((i<NUM_HOUSE)&&(fscanf(fp, "%d %s %d %ld %s\n", &house[i].bn,house[i].bt,&house[i].ba,&house[i].be,house[i].owner)!=EOF))
{
i++;
}
n=i;
fclose(fp);
system("cls");
printf("-----------------------------------------------------------------------\n");
printf("\n 楼号 类型 面积(m^2) 费用(w) 住户\n\n");
printf("-----------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
printf(" %-12d %-12s %-12d %-12ld %-12s\n",house[i].bn,house[i].bt,house[i].ba,house[i].be,house[i].owner);
}
system("pause");
printf("\n按 1 返回主菜单,按 0 直接退出\n");
scanf("%d",&q);
if(q==1)
{
menu();
}
else
{
exit(0);
}
}
void add()
{
int n = 0, i, m;
int len = 0;
system("cls");
printf("\n\n输入需要录入的房屋信息个数(1-100):\n");
scanf("%d",&m);
FILE* fp = fopen("E:\\test.txt", "at+");
for(i=0;i<m;i++)
{
printf("\n\n请分别输入“楼号”“类型”“面积”“费用”\n\n");
printf("\n请输入楼号:\n");
scanf("%d", &(house[i].bn));
getchar();
printf("\n请输入类型:(公寓/别墅)\n");
gets(house[i].bt);
printf("\n请输入面积(m^2):\n");
scanf("%d", &(house[i].ba));
getchar();
printf("\n请输入费用(w):\n");
scanf("%d", &(house[i].be));
getchar();
printf("\n请输入住户名:\n");
gets(house[i].owner);
fprintf(fp, "%d %s %d %ld %s\n", house[i].bn,house[i].bt,house[i].ba,house[i].be,house[i].owner);
printf(">>%d %s %d %ld %s<<\n",house[i].bn,house[i].bt,house[i].ba,house[i].be,house[i].owner);
}
printf("添加成功!\n\n");
system("pause");
fclose(fp);
menu();
}
void sort_bn()
{
system("cls");
struct House p;
int i=0,j=0;
FILE *fp=fopen("E:\\test.txt","at+");
while((i<NUM_HOUSE)&&(fscanf(fp, "%d %s %d %ld %s\n", &house[i].bn,house[i].bt,&house[i].ba,&house[i].be,house[i].owner)!=EOF))
{
i++;
}
n=i;
fclose(fp);
for(i=0;i<n;i++)
{
for (j=0;j<n-i-1;j++)
{
if(house[j].bn>house[j+1].bn)
{
p=house[j];
house[j]=house[j+1];
house[j+1]=p;
}
}
}
fp=fopen("E:\\test.txt","at+");
printf("排序后的顺序是:\n");
printf("-----------------------------------------------------------------------\n");
printf(" 楼号 类型 面积(m^2) 费用(w) 住户\n");
printf("-----------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
printf(" %-12d %-12s %-12d %-12ld %-12s\n",house[i].bn,house[i].bt,house[i].ba,house[i].be,house[i].owner);
}
fclose(fp);
system("pause");
menu();
}
void sort_be()
{
system("cls");
struct House p;
int i=0,j=0;
FILE *fp=fopen("E:\\test.txt","at+");
while((i<NUM_HOUSE)&&(fscanf(fp, "%d %s %d %ld %s\n", &house[i].bn,house[i].bt,&house[i].ba,&house[i].be,house[i].owner)!=EOF))
{
i++;
}
n=i;
fclose(fp);
for(i=0;i<n;i++)
{
for (j=0;j<n-i-1;j++)
{
if(house[j].be>house[j+1].be)
{
p=house[j];
house[j]=house[j+1];
house[j+1]=p;
}
}
}
printf("排序后的顺序是:\n");
printf("-----------------------------------------------------------------------\n");
printf(" 楼号 类型 面积(m^2) 费用(w) 住户\n");
printf("-----------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
printf(" %-12d %-12s %-12d %-12ld %-12s\n",house[i].bn,house[i].bt,house[i].ba,house[i].be,house[i].owner);
}
system("pause");
menu();
}
void sort_method()
{
int m;
system("cls");
printf("请选择按[ 1 楼号] / [ 2 费用]排序\n");
scanf("%d",&m);
switch(m)
{
case 1:sort_bn();break;
case 2:sort_be();break;
default:break;
}
}
void del()
{
system("cls");
int i=0,j=0,q;
char s[20];
int flag=0;
printf("按 1 继续进行,按 0 退出");
scanf("%d",&q);
if(q==0)
exit(0);
FILE *fp=fopen("E:\\test.txt","at+");
while((i<NUM_HOUSE)&&(fscanf(fp, "%d %s %d %ld %s\n", &house[i].bn,house[i].bt,&house[i].ba,&house[i].be,house[i].owner)!=EOF))
{
i++;
}
n=i;
fclose(fp);
printf("-----------------------------------------------------------------------\n");
printf(" 楼号 类型 面积(m^2) 费用(w) 住户\n");
printf("-----------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
printf(" %-12d %-12s %-12d %-12ld %-12s\n",house[i].bn,house[i].bt,house[i].ba,house[i].be,house[i].owner);
}
printf("\n请输入要删除的住户信息(住户名):\n");
scanf("%s",&s);
for (i = 0; i < n; i++)
{
if(strcmp(house[i].owner,s)==0)
{
flag=1;
for (j = i; j < n - 1; j++)
{
house[j] = house[j + 1];
}
n--;
}
}
if(flag==1)
{
printf("\n\n删除信息成功!\n");
}
printf("-----------------------------------------------------------------------\n");
printf(" 楼号 类型 面积(m^2) 费用(w) 住户\n");
printf("-----------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
printf(" %-12d %-12s %-12d %-12ld %-12s\n",house[i].bn,house[i].bt,house[i].ba,house[i].be,house[i].owner);
}
fopen("E:\\test.txt","wb");
for(i=0;i<n;i++)
fprintf(fp, "%d %s %d %ld %s\n", house[i].bn,house[i].bt,house[i].ba,house[i].be,house[i].owner);
fclose(fp);
system("pause");
menu();
}
void modify()
{
int m=0,i=0;
int number;
int area;
long expense;
char type[1024];
char owner[1024];
FILE *fp=fopen("E:\\test.txt","rt");
while((i<NUM_HOUSE)&&(fscanf(fp, "%d %s %d %ld %s\n", &house[i].bn,house[i].bt,&house[i].ba,&house[i].be,house[i].owner)!=EOF))
{
i++;
}
n=i;
fclose(fp);
system("cls");
printf("-----------------------------------------------------------------------\n");
printf(" 楼号 类型 面积(m^2) 费用(w) 住户\n");
printf("-----------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
printf(" %-12d %-12s %-12d %-12ld %-12s\n",house[i].bn,house[i].bt,house[i].ba,house[i].be,house[i].owner);
}
printf("请输入要修改信息的住户名:\n");
scanf("%s",owner);
for(i=0;i<n;i++)
{
if(strcmp(owner,house[i].owner)==0)
{
printf("请输入修改的信息类型:\n");
printf("----------------\n");
printf("1.修改楼号\n");
printf("2.修改类型\n");
printf("3.修改面积\n");
printf("4.修改费用\n");
printf("5.返回主菜单\n");
printf("----------------\n");
scanf("%d",&m);
switch(m)
{
case 1:
printf("请输入楼号:\n");
scanf("%d",&number);
house[i].bn=number;
break;
case 2:
printf("请输入类型:\n");
scanf("%s",type);
strcpy(house[i].bt,type);
break;
case 3:
printf("请输入面积:\n");
scanf("%d",&area);
house[i].ba=area;
break;
case 4:
printf("请输入费用:\n");
scanf("%ld",&expense);
house[i].be=expense;
break;
case 5:
menu();
}
}
}
printf("修改成功!\n");
printf("-----------------------------------------------------------------------\n");
printf(" 楼号 类型 面积(m^2) 费用(w) 住户\n");
printf("-----------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
printf(" %-12d %-12s %-12d %-12ld %-12s\n",house[i].bn,house[i].bt,house[i].ba,house[i].be,house[i].owner);
}
fopen("E:\\test.txt","wb");
for(i=0;i<n;i++)
fprintf(fp, "%d %s %d %ld %s\n", house[i].bn,house[i].bt,house[i].ba,house[i].be,house[i].owner);
fclose(fp);
system("pause");
menu();
}
void sum()
{
int i=0;
int num_bn=0,mun_bt_flat=0,num_bt_villa=0;;
FILE *fp=fopen("E:\\test.txt","rt");
while((i<NUM_HOUSE)&&(fscanf(fp, "%d %s %d %ld %s\n", &house[i].bn,house[i].bt,&house[i].ba,&house[i].be,house[i].owner)!=EOF))
{
i++;
}
n=i;
fclose(fp);
system("cls");
for(i=0;i<n;i++)
{
if(strcmp(house[i].bt,"公寓")==0)
{
mun_bt_flat++;
}
if(strcmp(house[i].bt,"别墅")==0)
{
num_bt_villa++;
}
}
if(i!=0)
printf("\n\n共有住户 [%d] 位\n",i);
if(i==0)
printf("\n\n当前无住户!\n");
if(mun_bt_flat==0)
printf("\n当前 [无] 公寓住宅!\n");
if(mun_bt_flat!=0)
printf("\n共有公寓住宅 [%d]\n",mun_bt_flat);
if(num_bt_villa==0)
printf("\n当前 [无] 别墅住宅!\n\n\n\n\n");
if(num_bt_villa!=0)
printf("\n共有别墅住宅 [%d]\n\n\n\n\n",num_bt_villa);
system("pause");
menu();
}
void password_setting()
{
char choice[5];
char password_rewrite_re[30];
printf("是否要继续修改密码?([y] or [n])\n");
scanf("%s",choice);
if(strcmp(choice,"n")==0||strcmp(choice,"N")==0)
{
menu();
}
if(strcmp(choice,"y")==0||strcmp(choice,"Y")==0)
{
FILE*fp=fopen("E:\\password.txt","at+");
fscanf(fp,"%s",password_rewrite);
fclose(fp);
printf("请输入需要重新修改的密码:\n");
scanf("%s",password_rewrite);
printf("请再次输入需要重新修改的密码:\n");
scanf("%s",password_rewrite_re);
if(strcmp(password_rewrite_re,password_rewrite)==0)
{
printf("修改密码成功!\n");
fopen("E:\\password.txt","wb");
fprintf(fp,"%s",password_rewrite);
fclose(fp);
system("pause");
menu();
}
else
printf("密码修改失败!\n");
system("pause");
menu();
}
}