回复 7楼 hellovfp
我想说,惊讶是肯定的。只是为什么你们不相信新人呢?我这里有一个程序,总是提示有问题,帮忙看下。
给出解决办法和原理,有兴趣的话看看吧
#include "stdio.h"
/*基本输入输出函数包含在此*/
#include "conio.h"
/*getch( )及getche( )函数包含在此*/
#include "string.h"
/*字符串相关函数包含在此*/
#include "windows.h"
/*sleep( )函数包含在此*/
/*宏定义*/
#define TRUE 1
#define COUNT 3
/*COUNT为输入登录密码次数的最大值*/
#define FACTOR 221
/*位异或运算因子,必须与加密因子保持相同
*/
/*函数声明*/
int read( );
/*从数据文件中读取账号信息*/
int write(int);
/*向账号信息数据文件中写入记录*/
void find(int);
/*查询账号信息记录*/
void modify(int);
/*修改账号信息记录*/
int add(int);
/*添加账号信息记录*/
int del(int);
/*删除账号信息记录* */
void list( );
/*浏览账号信息记录*/
/*结构体类型声明及结构体类型变量定义*/
struct account
/*帐号信息结构体*/
{
char type[20];
/*帐号类型,比如:建行借记卡*/
char ID[25];
/*帐号,比如:账号*/
char password[20];
/*密码*/
char question[20];
/*密码提示问题*/
char answer[20];
/*密码提示问题答案*/
};
struct account zhh[100];
/*定义记录账号信息的结构体数组,
长度是100*/
struct account zh;
/*定义一个记录账号信息的结构体变
量*/;
char denglu[12]="123456";
/*系统的登录密码*/;
/*主函数*/
main( )
{
char r;
/*记录用户选择的操作命令数字*/
char ch;
/*逐个记录用户输入的登录密码串中的字符*/
int n;
/*记录账号信息条数*/
char dl[12];
/*记录用户输入的登录密码*/
int i=0;
/*循环控制变量,用于将用户输入的登录密码
保存于数组dl中*/
int count=0;
/*记录输入密码次数,其值应小于等于COUNT*/
system("cls");
/*清屏命令*/
/******补全代码:密码登录系统功能。界面如图12-1、图12-2和
图12-3所示。******/
printf("***********************************\n");
printf("
★☆欢迎来到账号信息管理系统☆★ \n");
printf("
请输入登录密码,以#结束:
\n");
for(count=0;count<COUNT;count++)
{for(i=0;(ch=getch())!='#';i++)
{dl[i]=ch;putchar('*');}
dl[i]='\0';
if(strcmp(denglu,dl)==0)
{printf("
您已成功登陆!请稍
后......\n"); break;}
else {printf("您的登陆密码错误,请重新输入:\n") ;continue;}
}if(count>=COUNT){printf("对不起,登陆密码错误您无权限访问本系
统!\n");return(n);}
n=read( );
/*从数据文件中读取账号信息数据并初始化账
号信息结构体数组*/
/******补全代码:实现系统菜单,接收用户输入并输出提示信息。如图12
-4******/
while(TRUE)
{
system("cls");
printf("★☆欢迎来到账号信息管理系统☆★\n");
printf("请选择(1~7):\n");
printf("===============================\n");
printf("
1.查询账号信息记录
\n");
printf("
2.修改账号信息记录
\n");
printf("
3.添加账号信息记录
\n");
printf("
4.删除账号信息记录
\n");
printf("
5.保存数据到文件
\n");
printf("
6.浏览账号信息记录
\n ");
printf("
7.退出
\n");
printf("===============================\n");
printf("系统中没有账号信息,请选择3进行账号信息的添加\n");
printf("您的选择是:");
ch=getchar();
switch(r)
{
case '1':find(n);break;
case '2':modify(n);break;
case '3':n=add(n);break;
case '4':n=del(n);break;
case '5':n=write(n);break;
case '6':list();break;
case '7':return n;
default:printf("\t\t请按任意键返回重新选择(1-7)\n");getch();
}
}
return n;
}
/*read( )函数定义*/
int read( )
{
FILE *file;
/*声明文件指针*/
int n=0;
/*统计账号信息数据文件中记录的条数*/
if((file=fopen("gz.dat","rb"))==NULL)
{
printf("\n\n\t账号数据文件无法打开,或为空!");
printf("\n\n\t按任意键进入主菜单......");
getch();
return n;
}
else
{
while (fread(&zhh[n],sizeof(zhh[n]),1,file)==1)
n++;
fclose(file);
printf("\n\n\t账号数据读取完毕,共有%d人!\n");
printf("\n\t5秒后进入主菜单......\n");
Sleep(5000);
}
}
int write(int n)
{
FILE *file;
int i=0;
char t;
if(n==0) { printf("没有数据可存!按任意键返回主菜单\n");
getch();return 0;}
if((file=fopen("zhh.dat","wb"))!=NULL)
{printf("请输入用空格分格的账号类型,账号,密码信息,密码
提示问题,密码提示问题答案\n");
for(i=0;i<3;i++)
{
printf("第%d个账号类型
账号
密码信息
密码提示问题
密码提示问题答案:\n",i+1);
fwrite(&zhh[0],sizeof(zhh[0]),n,file);
printf("\t\t\t\t\t是否继续?<Y/N or y/n>");
t=getchar();
if(t=='Y'||t=='y') continue;
else break;}
fclose(file);
printf("\n\n\t\t%d条账号信息保存完毕!\n",n);
}
else printf("\t\t 无法打开账号信息数据文件!\n");
{printf("\n\t\t按任意键返回主菜单......");
getch();
return n;
}
}
void find(n)
{
char typef[20];
char ID[25];
int i;
if(n==0)
{printf("当前没有用户账号记录,按任意键返回主菜单:");
getch();
return;}
printf("请输入要查询的用户账号类型和账号:\n");
gets(typef);
gets(ID);
for(i=0;i<=n;i++)
{
if(strcmp(zhh[i].ID,ID)==0)
{
printf("\n
您查询的账号信息是: \n");
printf("\n
======================================\n\n");
printf("您要查询的账号信息是:");
printf("%-12s %-20s %-10s %-10 %-8\n",zhh[i].type,zhh
[i].ID,zhh[i].password,zhh[i].question,zhh[i].answer);
printf("\n
======================================\n\n");
}
}
printf("您所输入的账号信息有误或不存在!按任意键返回主菜
单......");
getch();
return;
}
void list(int n)
{
int i=0;
system("cls");
if(n==0)
{printf("无账号信息可显示!\n");
printf("显示完毕,按任意键退出程序\n");}
else
printf("\t\t\t\t\t\t\t你保存的账号信息如下:\n");
printf
("======================================================");
for(i=0;i<=n;i++)
{printf("第%d个账号信息:\n",i+1);
printf("%-12s %-20s %-10s %-10 %-8\n",zhh
[i].type,zhh[i].ID,zhh[i].password,zhh[i].question,zhh
[i].answer);}
printf
("======================================================");
printf("按任意键返回主菜单\n");
getch();
return;
}
int del(int n)
{
char typef[20];
char id[25];
int i,j;
char flag='n';
printf("请输入删除的用户账号类型和账号:\n");
gets(typef);
gets(id);
for(i=0;i<=n;i++)
{
if(strcmp(zhh[i].ID,id)==0)
{
printf("\n\t\t你确认要删除%s的账号信息吗?
(y/n)",zhh[i].ID);
flag=getchar();
if(flag=='y'||flag=='Y')
{if(i==n) n--;
else
{
for(j=i;j<=n;j++)
{
zhh[i]=zhh[j];
}
n--;
}
printf("您已成功删除账号信息,按任意键返回主菜
单......\n");
getch();
return n;
}
else
{
printf("您选择了不该删除的记录,按任意
键返回主菜单......\n");
getch();
return n;
}
}
}
if(i==n+1)
{
printf("\n\t\t本文件无此账号,按任意键返回主菜
单......");
getch();
}
}
int add(n)
{
printf("\t请输入职工账号: ");
fflush(stdin);
gets(zhh[++n].zhanghao);
printf("\n\t\t请输入职工的账号归属:");
scanf("%f",&zhh[i].type);
printf("\t\t请输入职工的账号:");
scanf("%f",&zhh[i].ID);
printf("\t\t请输入密码:");
scanf("%f",&zhh[i].password);
printf("\t\t请输入密码提示:");
scanf("%f",&zhh[i].question);
printf("\t\t请输入提示问题答案:");
scanf("%f",&zhh[i].answer);
printf("账号以保存,按任意键返回主菜单......");
n++;
getch();
return n;
}