求一个五百行的C语言程序,用上结构体,文件,C++编译啊,万分感谢

如题所述

512行的

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
//***********************函数声明*********************
int menu(); //菜单
struct scorenode *create(void); //创建链表,并返回链表的头指针
struct scorenode *load(); //调用导入学生记录函数
struct scorenode *search(struct scorenode *); //成绩查询函数
struct scorenode *del(struct scorenode *); //删除学生资料
struct scorenode *add(struct scorenode *); //追加学生资料
void print_s(struct scorenode *); //显示学生资料
void statistics(struct scorenode *); //统计学生成绩函数
void save(struct scorenode *); //保存学生资料
void sort(struct scorenode *); //排序函数
//*******************数据定义*************************
struct scorenode
{
int number; //学号
char name[10]; //姓名
float physics; //物理成绩
float english; //英语成绩
float maths; //数学成绩
struct scorenode *next; //存储下一个结点的地址
};
int n; //n为全局变量,存储录入的人数
//*********************主程序*************************
void main()
{
struct scorenode *head=NULL,*stu=NULL; //定义链表头指针为空
int k;
while(1)
{
k=menu();
switch(k)
{
case 1:head=create();break; //创建链表,录入数据
case 2:head=load();break; //调用导入学生函数
case 3:head=search(head);break; //成绩查询函数函数
case 4:head=del(head);break; //删除学生资料函数
case 5:head=add(head);break; //追加学生资料函数
case 6:print_s(head);break; //显示学生资料函数
case 7:statistics(head);break; //统计学生成绩函数
case 8:save(head);break; //保存学生的资料
case 9:sort(head);break; //排序函数
case 0:exit(0);
default:printf("输入错误,请重试!\n");
}
}
}
//*********************菜单选择界面**********************
int menu()
{
int i,k;
printf("\n\t\t\t欢迎进入成绩管理系统\n\n");
printf("\t\t\t 04电子应用\n");
for(i=0;i<80;i++)
printf("*");
printf("1.输入学生的资料\t 2.从文件调入资料\t 3.查询学生的成绩\n");
printf("4.删除学生的资料\t 5.追加学生的资料\t 6.显示学生的成绩\n");
printf("7.统计学生的成绩\t 8.保存输入的资料\t 9.对成绩进行排序\n");
printf("0.退出\n");
for(i=0;i<80;i++)
printf("*");
printf("请选择您的操作:");
scanf("%d",&k); //读取输入的选择
getchar(); //吸收回车符
return(k);
}
//***************创建链表,并返回链表的头指针******************
struct scorenode *create(void)
{
struct scorenode *head=NULL; //定义链表头指针为空
struct scorenode *p1,*p2,*p3;
int i;
n=0;
p1=p2=p3=(struct scorenode*)malloc(sizeof(struct scorenode)); //开辟一个新的存储单元
while(1)
{
printf("请输入学生资料,输(0)退出!\n");
repeat:
printf("请输入学号(学号应大于0):");
scanf("%d",&p1->number);
while(p1->number<0) //判断输入学号是否正确
{
printf("输入错误,请重新输入学号:");
scanf("%d",&p1->number);
}
getchar(); //吸收回车符
if(p1->number==0) //输入为0,退出
goto endd;
else
{
p3=head;
if(n>0)
{
for(i=0;i<n;i++)
{
if(p1->number!=p3->number) //判断输入的学号是否重复
p3=p3->next;
else
{
printf("学号重复,请重输!\n");
goto repeat;
}
}
}
}
printf("请输入姓名:");
scanf("%s",&p1->name);
printf("请输入物理,英语,数学成绩(0-100):");
scanf("%f,%f,%f",&p1->physics,&p1->english,&p1->maths);
while(p1->physics<0||p1->physics>100||p1->english<0||p1->english>100
||p1->maths<0||p1->maths>100) //判断输入的成绩数据是否正确
{
printf("输入错误,请重新输入成绩:");
scanf("%f,%f,%f",&p1->physics,&p1->english,&p1->maths);
}
getchar(); //吸收回车符
n=n+1; //录入的人数加1
if(n==1)
head=p1;
else
{
p2->next=p1;
p2=p1; //存储此次录入的数据
}
p1=(struct scorenode*)malloc(sizeof(struct scorenode)); //开辟一个新的存储单元
}
endd:
p2->next=NULL;
save(head);
return(head); //返回此次录入的链表值
}
//***********************保存学生资料************************
void save(struct scorenode *p1)
{
FILE *fp;
if((fp=fopen("scroce.txt","w"))==NULL)
{
printf("不能打开文件!\n");
}
while(p1!=NULL)
{
fprintf(fp,"%d\t%s\t%.1f\t%.1f\t%.1f\n",p1->number,p1->name,p1->physics,
p1->english,p1->maths);
p1=p1->next; //下移一个结点
}
fclose(fp);
printf("文件已保存!\n");
}
//****************调用导入学生记录函数********************
struct scorenode *load()
{
FILE *fp;
struct scorenode *p1,*p2,*head;
int m=0;
if((fp=fopen("scroce.txt","r"))==NULL) //打开文件
{
printf("不能打开文件!\n");
return 0;
}
printf("\n\t\t成绩管理系统\n\n");
printf("\t\t 04电子应用\n");
printf("---------------------------------------------------------\n");
printf("学号\t姓名\t物理\t英语\t数学\t\n");
printf("---------------------------------------------------------\n");
head=NULL;
p1=p2=(struct scorenode*)malloc(sizeof(struct scorenode)); //开辟一个新的存储单元
while(!feof(fp)) //文件是否结束
{
fscanf(fp,"%d%s%f%f%f",&p1->number,&p1->name,&p1->physics,
&p1->english,&p1->maths); //从文件中读入数据
printf("%d\t%s\t%.1f\t%.1f\t%.1f\n",p1->number,p1->name,p1->physics,
p1->english,p1->maths); //打印数据
m=m+1;
if(m==1)
head=p1;
else
{
p2->next=p1; //指向下一个节点
p2=p1;
}
p1=(struct scorenode*)malloc(sizeof(struct scorenode)); //开辟一个新的存储单元
}
p2->next=NULL;
printf("---------------------------------------------------------\n");
fclose(fp);
return head;
}
//**********************成绩查询函数*****************************
struct scorenode *search(struct scorenode *head)
{
int number;
struct scorenode *p1,*p2;
printf("\n请输入要查询的学生的学号(0)退出:");
scanf("%d",&number); //读取输入的学号
printf("---------------------------------------------------------\n");
printf("学号\t姓名\t物理\t英语\t数学\t\n");
printf("---------------------------------------------------------\n");
while(number!=0) //输入是0,退出
{
getchar(); //吸收回车符
if(head==NULL) //判断链表中是否有数据
{
printf("\n没有任何学生资料!\n");
return(head);
}
p1=head;
while(number!=p1->number&&p1->next!=NULL) //判断链表中数据是否结束
{
p2=p1;
p1=p1->next; //指向链表下一个结点
}
if(number==p1->number)
{
printf("%d\t%s\t%.1f\t%.1f\t%.1f\n",p1->number,p1->name,p1->physics,
p1->english,p1->maths); //打印数据
printf("---------------------------------------------------------\n");
}
else
printf("%d号学生不存在!\n",number);
printf("输入要查询的学生的学号(0)退出:");
scanf("%d",&number);
}
printf("退出查询!\n");
return(head);
}
//*************************删除学生资料***********************************
struct scorenode *del(struct scorenode *head)
{
struct scorenode *p1,*p2;
int number;
printf("\n请输入要删除的学生的学号(0)退出:");
scanf("%d",&number); //读取输入的学号
while(number!=0) //输入是0,退出
{
if(head==NULL) //判断链表中是否有数据
{
printf("\n没有任何学生资料!\n");
return(head);
}
p1=head;
while(number!=p1->number&&p1->next!=NULL) //判断链表中数据是否结束
{
p2=p1;
p1=p1->next; //指向链表下一个结点
}
if(number==p1->number)
{
if(p1==head) //判断链表是否是头指针
head=p1->next;
else
p2->next=p1->next; //删除链表
n=n-1; //学生人数减一
}
printf("输入要删除的学生的学号(0)退出:");
scanf("%d",&number);
}
printf("现在的学生数为:%d个!\n",n);
save(head); //保存资料
return(head);
}
//*******************追加学生资料****************************
struct scorenode *add(struct scorenode *head)
{
struct scorenode *p0,*p3,*stu;
int i;
while(1)
{
stu=(struct scorenode*)malloc(sizeof(struct scorenode)); //开辟一个新的存储单元
printf("\n输入要增加的学生资料!\n");
repeat2:
printf("请输入学号(学号应大于0):");
scanf("%d",&stu->number);
while(stu->number<0) //判断输入学号是否正确
{
printf("输入错误,请重新输入学号:");
scanf("%d",&stu->number);
}
if(stu->number==0) //输入为0,退出
goto end2;
else
{
p3=head;
if(n>0)
{
for(i=0;i<n;i++)
{
if(stu->number!=p3->number) //判断输入的学号是否重复
p3=p3->next;
else
{
printf("学号重复,请重输!\n");
goto repeat2;
}
}
}
}
printf("请输入姓名:");
scanf("%s",&stu->name);
printf("请输入物理,英语,数学成绩(0-100):");
scanf("%f,%f,%f",&stu->physics,&stu->english,&stu->maths);
while(stu->physics<0||stu->physics>100||stu->english<0||stu->english>100
||stu->maths<0||stu->maths>100) //判断输入的成绩数据是否正确
{
printf("输入错误,请重新输入成绩:");
scanf("%f,%f,%f",&stu->physics,&stu->english,&stu->maths);
}
getchar(); //吸收回车符
stu->next=NULL;
p0=head;
if(p0==NULL) //都没数据
{
head=stu; //存储新追加的数据
head->next=NULL;
}

else
{
while(p0->next!=NULL)
p0=p0->next;
p0->next=stu; //存储新追加的数据
}
n=n+1; //学生个数加1
}
end2:
printf("现在的学生数为:%d个!\n",n);
//sort(head);
save(head); //保存资料
return(head); //返回此次录入的链表值
}
//***********************显示学生资料**************************
void print_s(struct scorenode *head)
{
struct scorenode *p;
if(head==NULL)
printf("\n没有任何学生资料!\n");
else
{
printf("总人数:%d\n",n); //显示总人数
printf("---------------------------------------------------------\n");
printf("学号\t姓名\t物理\t英语\t数学\t\n");
printf("---------------------------------------------------------\n");
p=head;
while(p!=NULL)
{
printf("%d\t%s\t%.1f\t%.1f\t%.1f\n",p->number,p->name,p->physics,
p->english,p->maths); //打印数据
p=p->next; //指向下一结点
}
printf("---------------------------------------------------------\n");
}
}
//*****************统计学生成绩函数************************
void statistics(struct scorenode *head)
{
float sum,sum1=0,sum2=0,sum3=0,ave,ave1=0,ave2=0,ave3=0,max=0,min=0;
struct scorenode *p;
int y=0,i=0;
p=head;
if(head==NULL)
printf("\n没有任何学生资料!\n");
else
{
printf("---------------------------------------------------------\n");
printf("学号\t姓名\t物理\t英语\t数学\t总分\t平均分\n");
printf("---------------------------------------------------------\n");
while(p!=NULL)
{
sum=p->physics+p->english+p->maths; //计算个人总分
ave=sum/3; //计算个人平均分
printf("%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",p->number,p->name,p->physics,
p->english,p->maths,sum,ave); //打印数据
sum1=sum1+p->physics; //累加物理分数
sum2=sum2+p->english; //累加英语分数
sum3=sum2+p->maths; //累加数学分数
y=y+1; //计算人数
if(max<sum)
max=sum; //计算最高分
else if(min>sum)
min=sum; //计算最低分
p=p->next; //指向下一结点
}
ave1=sum1/y; //计算物理平均分
ave2=sum2/y; //计算英语平均分
ave3=sum3/y; //计算数学平均分
printf("物理平均分:%.1f\n",ave1);
printf("英语平均分:%.1f\n",ave2);
printf("数学平均分:%.1f\n",ave3);
printf("总分最高分:%.1f\n",max);
printf("总分最低分:%.1f\n",min);
printf("\n");
}
}
//******************结点中数据交换*******************
void swap(struct scorenode *max,struct scorenode *p)
{
int k;
char t[10];
float temp;
k=max->number;
max->number=p->number;
p->number=k;
strcpy(t,max->name);
strcpy(max->name,p->name);
strcpy(p->name,t);
temp=max->physics;
max->physics=p->physics;
p->physics=temp;
temp=max->english;
max->english=p->english;
p->english=temp;
temp=max->maths;
max->maths=p->maths;
p->maths=temp;
}
//*****************排序函数***************************
void sort(struct scorenode *head)
{
struct scorenode *p,*max;
int i,j,x;
if(head==NULL)
{
printf("\n没有任何学生资料,请先建立链表!\n");
}
for(i=0;i<80;i++)
printf("*");
printf("1.按学生学号排序\t2.按学生姓名排序\t3.按物理成绩排序\n");
printf("4.按英语成绩排序\t5.按数学成绩排序\n");
printf("请选择操作(0)退出:");
scanf("%d",&x); //读取输入的选择
getchar();
for(i=0;i<80;i++)
printf("*");
switch(x)
{
case 1: //学号排序
for(i=1;i<n;i++)
{
max=p=head;
p=p->next;
for(j=0;j<n-i;j++)
{
if(max->number>p->number)
swap(max,p);
p=p->next;
max=max->next;
}
}
print_s(head);break; //打印数据
case 2:
for(i=1;i<n;i++) //姓名排序(冒泡方式)
{
max=p=head;
p=p->next;
for(j=0;j<n-i;j++)
{
if(strcmp(max->name,p->name)>0)
swap(max,p);
p=p->next;
max=max->next;
}
}
print_s(head);break;
case 3:
for(i=1;i<n;i++) //按物理成绩排序
{
max=p=head;
p=p->next;
for(j=0;j<n-i;j++)
{
if(max->physics>p->physics)
swap(max,p);
p=p->next;
max=max->next;
}
}
print_s(head);break;
case 4:
for(i=1;i<n;i++) //按英语成绩排序
{
max=p=head;
p=p->next;
for(j=0;j<n-i;j++)
{
if(max->english>p->english)
swap(max,p);
p=p->next;
max=max->next;
}
}
print_s(head);break;
case 5:
for(i=1;i<n;i++) //按数学成绩排序
{
max=p=head;
p=p->next;
for(j=0;j<n-i;j++)
{
if(max->maths>p->maths)
swap(max,p);
p=p->next;
max=max->next;
}
}
print_s(head);break;
case 0:
break;
}
save(head); //保存排序后的数据
}追问

没有头文件啊,而且也太高级了,交上去老师肯定不信

追答

最上面那几行不就是头文件吗:
#include
#include
#include
#include

这个不算高级吧,而且500行,要不写什么?猜拳游戏?撑死了200行吧

追问

我说错了,是要用文件保存数据,

追答

怎么没有,大哥,你运行确认了吗?

请看如下两个函数的内部处理:
//***********************保存学生资料************************
void save(struct scorenode *p1)

//****************调用导入学生记录函数********************
struct scorenode *load()

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-01-02
头文件部分
//显示欢迎信息

void welcome();

//系统主菜单

void mainmenu();

//开户

void openAnAccount();

//销户

void closeAnAccount();

//存款

void deposit();

//取款

void withdraw();

//查询

void query();

//查找一个账户在数组中的位置

int findAnAccount (int accNumber);

//显示一个账户的信息

void dispAnAccount (int i);

//生成帐号

int createAccNumber();

//把结构体数组中的数据写入文件

int writeData();

//把数据从文件中读到结构体数组中

int readData();

//检查录入的户名,密码,存入金额格式是否合法。返回值:0:合法,1:非法。
//flag:0:户名,1:密码,2:存入金额。checkStr:需检查的项目。

int checkInput (int flag , char *checkStr);

//去除右空格

char *rightTrim (char *str);

//显示所有账户

void queryall();

//得到键盘录入的户名

void getaccName (char accNumber[]);

//得到键盘录入密码

void getaccPWD (char accPWD[] );

//得到键盘录入金额

double getcash();

//得到键盘录入帐号

int getaccNumber (int flag);

#define N_MAXREC_NO 100 //文件最大行数
#define MAXLINE 256 //行最大长度

//数据结构体记录
//账户结构体的声明

struct record
{
int accNumber;//帐号
char accName[9];//户名
char accPWD[7];//密码
double balance;//余额
char flag[2];//销户标志

};

//自定义数据类型

typedef struct record RECORD;

//结构体数组

RECORD rs[N_MAXREC_NO];

//最后一个账户在结构体中的位置

int maxAccount = -1;//初始化为零。

源文件部分
#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <ctype.h>

#include <conio.h>

#include "bank.h"

int main ()
{

char userName[9];

char userPWD[7];

int i;

welcome();

for (i = 0; i < 3; i++)
{
printf ("\n");

printf( " 请输入您的用户名: " );

scanf ("%s",userName);

fflush (stdin);

printf("\n");

printf(" 请输入您的密码: ") ;

scanf ("%s",userPWD);

fflush (stdin);

if ((strcmp(userName , "admin" ) == 0) && (strcmp(userPWD , "admin") == 0 ))
{
//用户名和密码正确,显示主菜单
mainmenu();
}

else
{
if (i < 2)
{
//用户名或密码错误,提示用户重新输入
printf("用户名或密码错误,请重新输入!");
}

else
{
//连续三次输错用户名或密码,退出系统。
printf( "用户名或密码错误,退出系统!");
}
}
}

return 0;
}

void welcome ()
{
printf("+-----------------------------------------------+\n");
printf("| |\n");
printf("| 欢迎使用储蓄综合业务平台 |\n");
printf("| |\n");
printf("+-----------------------------------------------+\n");
printf(" ^ ^ 小曼软件,版权所有! \n");
}

//显示系统菜单信息
void mainmenu()
{
int choice;

choice = -1;

do
{
printf("\n");
printf("+-----------------------------------------------+\n");
printf("| 存款 请按 1 开户 请按 4 |\n");
printf("| 取款 请按 2 销户 请按 5 |\n");
printf("| 查询 请按 3 退出 请按 0 |\n");
printf("+-----------------------------------------------+\n");

printf("请输入您的选择 : ");

scanf ("%d", &choice);

fflush ( stdin );

switch (choice)
{
case 0:
exit (0);
case 1:
deposit ();
break;
case 2:
withdraw ();
break;
case 3:
query ();
break;
case 4:
openAnAccount();
break;
case 5:
closeAnAccount();
break;
case 6:
queryall ();
break;
default:
printf(" 无效选项!" );

printf("\n");
break;
}

}while (choice != 0);

maxAccount = 0;
}

//开户
void openAnAccount ()
{
int accNumber; //账号

char accName[9]; //户名

char accPWD[7]; //密码

double cash; //存入金额

//初始化变量
accNumber = 0;

memset(accName, 0, sizeof(accName));

memset(accPWD, 0, sizeof(accPWD));

cash = 0;

//生成账号
accNumber = createAccNumber();

//获取帐户名称
getaccName(accName);

//获取账户密码
getaccPWD(accPWD) ;

//获取存入金额
cash = getcash(0);

maxAccount++;

rs[maxAccount].accNumber = accNumber;//把帐号存入结构体

strcpy(rs[maxAccount].accName,accName);//把用户名存入结构体

strcpy(rs[maxAccount].accPWD,accPWD);//把密码存入结构体

rs[maxAccount] .balance = cash;//把第一次开户的存款存入结构体

strcpy(rs[maxAccount] .flag,"0");//把开户时的账户状态存入结构体

//显示账户信息
dispAnAccount(maxAccount);

printf("开户成功!按任意键返回...");

printf ("\n");

getch();

return;
}

//显示用户信息
void dispAnAccount(int i)
{
printf("+-------------------------------------------------+\n");
printf("| %-5s | %-8s | %-6s | %-12s | %4s |\n","帐号","户名","密码","余额","状态");
printf("--------+----------+--------+--------------+------+\n");
printf("| %5d| %-8s | %-6s | %12.2f | %4s |\n",rs[i].accNumber,rs[i].accName,rs[i].accPWD,rs[i].balance,atoi(rs[i].flag)?"销户":"正常");
printf("+-------------------------------------------------+\n");

}

//生成帐号
int createAccNumber ()
{
if ( maxAccount == -1)
{
//帐号从10001开始
return 10001;
}

else
{
//顺序产生帐号
return rs[maxAccount].accNumber + 1;//顺序产生帐号
}
}

//获取账户名称
void getaccName(char accName[])
{
char caccName[100];//户名

int i;

while (i)
{
memset (caccName, 0, sizeof(caccName));
printf ("\n");
printf ("请输入储户户名:" );
scanf ("%s",caccName);
fflush(stdin);

if (checkInput (0, caccName))
{
printf( "超过位的最大户名长度!\n");
continue;
}

i = 0;
}

memcpy (accName, caccName, 9);
}

//获取帐号密码
void getaccPWD (char accPWD[])
{
char caccPWD[100]; //密码

int i = 1;

while (i)
{
memset ( caccPWD, 0, sizeof (caccPWD));
printf ("\n");
printf("请输入储户密码:" );
scanf ("%s" ,caccPWD);
fflush(stdin);

if (checkInput (1, caccPWD))
{
printf( "超过位的最大密码长度! \n");
continue;
}

i = 0;

}

memcpy (accPWD, caccPWD, 7);
}

//获取存入(取款)金额
double getcash (int flag)
{
char ccash[100]; //金额

double dcash; //金额

int i = 1;

int j;

wangman:while (i)
{
memset(ccash, 0, sizeof(ccash));

dcash = 0;

printf ("\n");

switch (flag)
{
case 0: printf ("请输入存入金额:") ;
break;

case 1: printf("请输入取款金额:");
break;
}

scanf ("%s", ccash);
if ( (checkInput(2, ccash) ))
{
printf("录入的金额超过位的最大存入(取出)金额长度!请从新输入。。。。。\n");
goto wangman;//输入金额不合法,跳到wangman(王曼)哪一行从新执行,输入。。。。
}

for (j = 0; j <= 99; j++)
{
if ( !(ccash[j] >= '0' && ccash[j] <= '9' || ccash[j] == '\0' || ccash[j] == '.'))
{
printf("您的输入有误,请再次输入!\n");
goto wangman;//输入金额不合法,跳到wangman(王曼)哪一行从新执行,输入。。。。
}
}

dcash = atof(ccash);

fflush (stdin);

i = 0;

}
/*scanf("%lf",&dcash);
fflush(stdin);
sprintf(ccash,"%12.2f",dcash);
if ( (checkInput(2, ccash) )
{
printf("录入的金额超过位的最大存入(取出)金额长度!\n"); (书上这段有漏洞,比如输入负数也能开户。)

getcash(flag);(此处课本误用continue语句,,他只能用在循环语句里,不能用在选择语句里,记住啊。。)
}*/

return dcash; //把录入金额返回主调函数。。。
}

//检查操作员输入的账户信息是否规范
int checkInput(int flag, char *checkStr)
{
switch(flag)
{
//检测用户名是否超过最大长度
case 0:
{
if(strlen(checkStr) > 8)
{
return 1;
}
break;
}
//检测密码是否超过最大长度
case 1:
{
if(strlen(checkStr) > 6)
{
return 1;
}
break;
}
//检测金额是否超过最大长度
case 2:
{
if(strlen(checkStr) >12)
{
return 1;
}
break;
}
default:
return 0;
}

return 0;
}
void deposit ()
{

int accNumber ; //账号

int accountPosition; //账户在数组中的位置

double cash; //存入金额

accNumber = 0;

accountPosition = -1; //-1,表示未找到

cash = 0;

accNumber = getaccNumber(0); //获取账号

accountPosition = findAnAccount (accNumber);//调用查找函数,记下账户位置,即下标号。。。。。

if (accountPosition == -1)
{
printf("查无此账户,请按任意键返回..." );
printf("\n");
getch();
return;
}

//显示账户信息
dispAnAccount(accountPosition);

//已销户账户,不能进行存款操作
if (strcmp(rs[accountPosition].flag,"0") !=0) //已销户账户,不能进行存款操作
{
printf("该账户已销户,不能存款!,请按任意键返回。。。。" );
printf("\n");
getch();
return;
}

cash = getcash(0);

rs[accountPosition].balance = rs[accountPosition].balance + cash;

dispAnAccount(accountPosition);

printf ("存款成功!按任意键返回。。。");

printf("\n");

getch();
}

//得到一个帐号
int getaccNumber (int flag)
{
int iaccNumber;

iaccNumber = 0;

printf("\n");

switch (flag)
{
case 0 :
printf("请输入要存款的账号:" );
break;
case 1 :
printf("请输入要取款的账号:" );
break;
case 2 :
printf("请输入要销户的账户:" );
break;
case 3 :
printf("请输入要查询的账号:" );
break;
}

scanf("%d",& iaccNumber);

fflush(stdin);

return iaccNumber;
}

//查找账户函数
int findAnAccount (int accNumber)
{
int accountPosition;//账户在数组中的位置/下标

int i;//循环控制变量

accountPosition = -1; //初始位置是-1,表示未找到

//查找账户的位置
for (i = 0; i <= maxAccount; i++)
{

if (rs[i].accNumber == accNumber)
{
accountPosition = i;
break;
}
}

return accountPosition;
}
//取款
void withdraw ()
{
int accNumber;//帐号

char accPWD[7];//密码

int accountPosition;//账户在数组中的位置

double cash;//存入金额

//初始化
accNumber = 0;
accountPosition = -1;
cash = 0;

memset(accPWD, 0, sizeof(accPWD));

//获取取款帐号
accNumber = getaccNumber(1);

//查找该账户
accountPosition = findAnAccount(accNumber);

if (accountPosition == -1)
{
printf("查无此账户,按任意键返回。。。。");
printf("\n");
getch ();
mainmenu();
}

if (strcmp(rs[accountPosition].flag,"0") !=0) //已销户账户,不能进行取款操作
{
printf("该账户已销户,不能取款!,请按任意键返回。。。。" );
printf("\n");
getch();
return;

}

getaccPWD(accPWD);

if (strcmp(rs[accountPosition].accPWD,accPWD) != 0)
{
printf("密码不正确!请按任意键返回。。。。" );
printf("\n");
getch ();
return;
}

cash = getcash(1);

rs[accountPosition].balance = rs[accountPosition].balance - cash;

if ( rs[accountPosition].balance < 0)
{
rs[accountPosition].balance = rs[accountPosition].balance + cash;//还原原始余额。。。。。。。。
printf("\n");
printf("对不起,您的余额不足,取款失败!按任意键返回。。。。");
printf("\n");
getch();
return;
}

}
//显示所有账户信息
void queryall()
{
int i;
for( i = 0; i <= maxAccount; i++)
{
dispAnAccount(i);
}

printf( "系统中所有账户均已列出,按任意键返回..." );

fflush(stdin);

getch();

return;
}

//销户
void closeAnAccount ()
{
char a = '1';

int accNumber;

char accPWD[7];

char userAnswer;

int accountPosition;

accountPosition = -1;

accNumber = 0;

memset(accPWD, 0, sizeof(accPWD));

accNumber = getaccNumber(2);

getaccPWD(accPWD);

accountPosition = findAnAccount(accNumber);

if (accountPosition == -1)
{
printf("查无此账户,按任意键返回...");
printf("\n");
getch ();
return;
}

if (strcmp(rs[accountPosition].accPWD,accPWD) != 0)
{
printf("密码不正确!请按任意键返回..." );
printf("\n");
getch ();
return;
}

dispAnAccount(accountPosition);

if (strcmp(rs[accountPosition].flag,"0") !=0)
{
printf( "该账户已经销户,不能再次销户,请按任意键返回...");
printf("\n");
getch ();
return;
}

printf("确认将账户%d销户吗? [1:销户|其它:不销户]",

rs [accountPosition] .accNumber);

scanf("%c",&userAnswer);

fflush(stdin);

if (userAnswer == a)
{
strcpy(rs[accountPosition].flag, "1");
rs[accountPosition].balance = 0;
dispAnAccount (accountPosition);
printf ("销户成功!按任意键返回...");
printf("\n");
getch();
return;
}

printf ("用户取消销户!按任意键返回...");
printf("\n");
getch();
return;
}

//查询
void query ()
{
int accNumber;

char accPWD[7];

int accountPosition;

accountPosition = -1;

accNumber = 0;

memset (accPWD, 0, sizeof(accPWD));

accNumber = getaccNumber(3);

getaccPWD(accPWD);

accountPosition = findAnAccount(accNumber);

if (accountPosition == -1)
{
printf("查无此账户,按任意键返回" );
printf("\n");
getch();
}

dispAnAccount(accountPosition);

if (strcmp(rs[accountPosition].accPWD, accPWD) != 0)
{
printf("\n密码不正确!按任意键返回...");
printf("\n");
getch();
return;
}

if (strcmp(rs[accountPosition].flag, "0") !=0)
{
printf("\n该户已销户!按任意键返回...");
printf("\n");
getch();
return;
}

printf("\n查询成功!按任意键返回...");

printf("\n");

getch();

return;
}本回答被提问者和网友采纳
相似回答