运行程序的时候 停止工作。感觉函数都没办法调用,求解答
#include <stdio.h>#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include<malloc.h>
#define N sizeof(person)
#define NULL 0
struct person
{
char num[10];
long num1;
char name[20];
char sex[10];
char com[20];
char tel[20];
int area;
int totalfee;
struct person*next;
}*head,*p;
main ()
{void Face();
int n;
printf("请输入相应的序号:");
scanf("%d",&n);
getch();
while (n!=0)
{
switch (n)
{
case 1:void input_data();break;/*从文件中读取业主信息,创建链表*/
case 2:void save_infor();break;/*业主信息数据的存储*/
case 3:void read_infor();break;/*业主信息数据的读取*/
case 4:void print_infor();break;/*输出数据*/
case 5:void find_owner();break;
case 6:int modify_infor();break;
case 7:int delete_owner();break;
case 8:void add_owner();break;
case 9:void sort_num();break;
case 10:void payment();break;
case 11:void save_infor();system("cls");return;
default:;
}
}
}
void Face()
{
system ("cls");
printf("\n\n\n\t----------欢迎进入小区业主管理系统---------\n");
printf("\t\t 1.业主信息的录入 2.将数据存储到文件里 \n");
printf("\t\t 3.从文件中读数据 4.业主信息的输入 \n");
printf("\t\t 5.业主信息的查找 6.业主信息的修改 \n");
printf("\t\t 7.业主信息的删除 8.业主信息的添加 \n");
printf("\t\t 9.业主信息的排序 10.业主缴费 \n");
printf("\t\t 11.退出 \n");
printf("请输入相应的序号:");
}
void input_data() /*首次登录系统,数据是手动输入得到的*/
{int pingfang=10;
struct person*p1,*p2;
char flag='y';
head=p2=(struct person*)malloc(N);/*head p2都指向头节点*/
while(flag=='y')
{
p1=(struct person*)malloc(N);/*P1指向新申请的节点*/
printf("请输入:单元号 户号 姓名 性别 工作单位 电话号码 房屋面积\n");
scanf("%s%1d%s%s%s%s%d",p1->num,&p1->num1,p1->name,p1->sex,p1->com,p1->tel,&p1->area);
p1->totalfee=p1->area*pingfang;
p2->next=p1; /*将新节点连接到表尾*/
p2=p1; /*p2指向新的表尾*/
getch();
printf("继续输入请按y:");
flag=getch();
}
p2->next=NULL;/*表尾节点next域置空*/
void Face();
}
void save_infor()
{struct person*h=head,*owner;
FILE*fp;
char filename[40];/*定义所要存储的文件名*/
printf("\n请输入要保存的文件名:");
scanf("%s",filename);
if((fp=fopen(filename,"wt"))==NULL)/*判断打开文件是否成功*/
{printf("写文件错误,按任意键退出\n"); exit(1);}
for (owner=h->next;owner!=NULL;owner=owner->next)
fprintf(fp,"%s %1d %s %s %s %s %d %d\n",owner->num,owner->num1,owner->name,owner->sex,owner->tel,owner->area,owner->totalfee);/*格式化字符串写函数*/
printf("\n文件成功保存,按任意键返回\n");
getch();/*从键盘上输入一个字符但是不会显示在屏幕上*/
fclose(fp);/*文件上所指指针FP关闭*/
}
void read_infor()
{
struct person*r,*owner;
FILE*fp;
char filename[40];
printf("请输入要打开的文件名:");
scanf("%s",filename); /*输入要打开的文件名*/
if((fp=fopen(filename,"rt"))==NULL) printf("读文件出错,按任意键退出!\n");exit(1);/*打开错误则退出*/
head=(struct person*)malloc(sizeof(struct person));/*开辟读写的空间*/
head->next=NULL;/*头指针置空*/
r=head;/*指向头节点*/
while(!feof(fp))/*判断指针文件的出错的函数*/
{
owner=(struct person*)malloc(sizeof(struct person));
fscanf(fp,"%s%1d%s%s%s%s%d%d",owner->num,&owner->num1,owner->name,owner->sex,owner->tel,&owner->area,&owner->totalfee);/*格式化字符读函数*/
r->next=owner;
r=owner;
}
r->next=NULL;/*尾指针置空*/
fclose(fp);
void print_infor();
printf("文件中信息已经正确输出,按任意键返回\n");
getch();
}
void print_infor() /*输出函数*/
{
struct person*p=head;
p=p->next;
while(p!=NULL)
{
printf("\n单元号:%s 户号:%1d 姓名:%s 性别:%s 工作单位:%s 电话号码:%s 房屋面积:%d应缴物业费%d\n",p->num,p->num1,p->name,p->sex,p->com,p->tel,p->area,p->totalfee);
p=p->next;
}
}
struct person*find_name(char name[10])
{
struct person*p=head;
while(p->next!=NULL)
{p=p->next;
if(strcmp(p->name,name)==0)return p;
}
return NULL;
}
void find_owner()
{
struct person*p=head;
char name[10];
printf("请输入要查找的名字:");
scanf("%s",name);
p=find_name(name);
if(p!=0)printf("恭喜找到!单元号:%s 户号:%1d 姓名:%s 性别:%s 工作单位:%s 电话号码:%s 房屋面积:%d\n",p->num,p->num1,p->name,p->sex,p->com,p->tel,p->area);
}
modify_infor()
{
int choice;
char name[10];
struct person*p=head;
printf("请输入要修改的名字:");
scanf("%s",name);
while(p->next!=NULL)
{
p=p->next;
if(strcmp(p->name,name)==0)
{
while (choice!=0)
{
printf("请输入要修改的选项:1单位号 2房户号 3工作单位 4电话号码 0退出\n");
printf("请选择(0--4):");
switch (choice)
{
case 1:printf("请输入新的单位号:");scanf("%s",p->num);
case 2:printf("请输入新的房户号:");scanf("%1d",p->num1);
case 3:printf("请输入新的工作单位:");scanf("%s",p->com);
case 4:printf("请输入新的电话号码:");scanf("%s",p->tel);
case 0:return 0;
}
}
}
}
}
void add_owner()
{int pingfang=10;
struct person*p2=head,*p1;
char flag='y';
while (p2->next!=NULL)
p2=p2->next;
while(flag=='y')
{
p1=(struct person*)malloc(N);
printf("请输入:单元号 户号 姓名 性别 工作单位 电话号码 房屋面积\n");
scanf("%s%1d%s%s%s%s%d",p1->num,&p1->num1,p1->name,p1->sex,p1->com,p1->tel,&p1->area);
p1->totalfee=p1->area*pingfang;
p2->next=p1; /*将新结点连接到表尾*/
p2=p1; /*p2指向新的表尾*/
getch( );
printf("继续输入请按键y:");
flag=getch( );
}
}
int delete_owner( )
{
char name[10];
struct person*p0=head,*p;
p=p0->next;
if(p==NULL) return 0; /*(只要头结点为空表,则不能删除*/
printf("请输入要删除的业主姓名:\n");
scanf("%s",name);
while(p!=NULL)
{
if(strcmp(p->name,name)==0) /*找到要删除的节点*/
{
p0->next=p->next;
free(p);return 1;/*后续结点链接到前驱结点之后*/
}
p0=p; /*移向指针继续查找*/
p=p->next;
}
return 0; printf("抱歉删除失败,请重新选择\n"); /*未找到则返回0*/
}
void payment()
{
struct person*p=head;
int money;
char name[10];
printf("\n请输入要查找的姓名:");
scanf("%s",name);
p=find_name(name);
if(p==NULL){ printf("没有找到该用户");return;}
else
printf("您应缴的物业费是:%d",p->totalfee);
printf("\n请输入您要缴纳的费用额:");
scanf("%f",&money);
p->totalfee=p->totalfee-money;
printf("目前还剩没缴纳的费用为%d",p->totalfee);
}
求解 程序没有error 但是运行不了。求解答求解答