下面进入正题:
隐私账号管理系统:
1需求分析: 对个人的账号信息进行记录和保护,已达到随时记录随时查询的目的。
1.1问题提出: 计划写一个隐私信息管理系统,主要用来管理隐私信息。
1.2本系统设计的知识点: 函数、结构体、文件、循环、分支、数组等。
1.3功能要求:
1)建立每个账号的编号,账号位置,账号描述,账号名以及密码
2)修改账号信息
3)删除账号信息
4)查询账号信息,分为按部分账号名查找和按编号查找
5)输出全部账号信息
6)退出程序
2总体设计
2.1功能设计:
1)程序密码验证函数:在程序开始时会出现如下程序,为防止遗忘初始密码,默认密码内置在代码中,为110120,可自行修改。
2)利用switch语句设计主菜单:
------ 隐私信息管理系统------
1. 账号信息录入
2. 账号信息修改
3. 删除账号信息
4. 查询账号信息
5. 输出全部账号信息
6. 退出
请选择(1-6):
3)设计分支:按下4后会出现
------ 查询菜单 ------
请输入选项编号(1~2)
1----按编号查询
2----按部分账号名查询
可按两种方式查询账号具体信息
4)各个函数作用
int Verification();//程序密码验证函数
int Mess_SearchByIndex(int id);//通过编号寻找账号信息
void Mess_Find();//通过编号寻找账号信息并输出
void Mess_DisplaySingle(int index); //输出对应编号的信息
void Mess_Insert();//加入账号信息
void Mess_Modify();//修改账号信息
void Mess_Delete();//删除账号信息
void Mess_Select();//通过部分账号信息查询账号信息
void Mess_Display();//输出全部账号的信息
void IO_ReadInfo();//读出文件
void IO_WriteInfo();//读入文件
3详细设计:
3.1模块功能说明: 主要分为建立、修改、删除、查询、输出四个大模块
3.1.1:建立模块:
函数原型:void Mess_Insert()。
功能:对计划建立的账号输入编号、账号位置、账号描述、账号名称、密码,且对密码进行加密处理。
输入:根据对应提示输入即可
3.1.2:修改模块:
函数原型:void Mess_Modify()。
功能:块修改对应编号的账号信息
输入:输入想要修改信息的账号编号
3.1.2:查询模块:
函数原型1:void Mess_Select();
功能:对输入的部分账号信息进行查找
函数原型2:void Mess_Find();
功能:对输入的账号编号进行查找
输入:选择二者其一对应输入即可
3.1.2:输出模块:
函数原型:void Mess_Display()。
功能:对已记录的所有账号的详细信息输出
输入:无
5测试:
输入程序密码,进入隐私信息管理系统
输入两个账号信息:
全部输出账号信息:
以及查询:
本代码需要在c盘下建立一个message.txt文档,用于存储数据,所有的账号信息都以二进制形式存储在这里,也不用担心密码泄露,因为程序里面设置了一个简单的密码加密程序,存储的密码是加密过的,也可自行在代码里面修改加密方式,这里是简单的把密码的ASCII码+48存储的,读出的时候也加上了48
1)建好一个txt文档保存数据
2)放一个该代码的运行程序在桌面上,源码自行保存
3)每次储存好数据记得按6正常退出,不可以直接关闭运行窗口
4)保护好txt文档,勿对其中内容进行修改
#include
#include
#include
struct Mess
{
int No;
char place[50];
char describe[50];
char name[50];
char code[50];
}mess[1000];
int Verification();//程序密码验证函数
int Mess_SearchByIndex(int id);//通过编号寻找账号信息
void Mess_Find();//通过编号寻找账号信息并输出
void Mess_DisplaySingle(int index); //输出对应编号的信息
void Mess_Insert();//加入账号信息
void Mess_Modify();//修改账号信息
void Mess_Delete();//删除账号信息
void Mess_Select();//通过部分账号信息查询账号信息
void Mess_Display();//输出全部账号的信息
void IO_ReadInfo();//读出文件
void IO_WriteInfo();//读入文件
int num=0;
int Verification()
{
int i;
char inkey[20];
printf("------程序密码验证------\n请输入密码:");
for(i=1;i<=3;i++)
{
scanf("%s",inkey);
if(strcmp(inkey,"110120")==0)
break;
else
printf("\n密码错误,还有%d次机会\n",3-i);
}
if(i==4)
{
printf("3次输入全错,退出程序\n");
return 0;
}
else
{
printf("输入正确,进入隐私信息管理系统\n");
return 1;
}
}
int Mess_SearchByIndex(int id)
{
int i;
for (i=0;i<num;i++)
{
if (mess[i].No==id)
{
return i;
}
}
return -1;
}
void Mess_Find()
{
int id;
while(1)
{
printf("输入你想查找账号的编号:");
scanf("%d",&id);
getchar();
Mess_DisplaySingle(Mess_SearchByIndex(id));
printf("是否继续查询?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
int Mess_SearchByName(char name[])
{
int i;
for (i=0;i<num;i++)
{
if (strstr(mess[i].name,name))
{
return i;
}
}
return -1;
}
void Mess_DisplaySingle(int index)
{
char str[20];
for(int i=0;i<strlen(mess[index].code);i++)
{
str[i]=mess[index].code[i]-48;
}
str[strlen(mess[index].code)]='\0';
printf("%-5s%-25s%-20s%-18s%-10s\n","编号","账号位置","账号描述","账号名","密码");
printf("-------------------------------------------------------------------------\n");
printf("%-5d%-25s%-20s%-18s%-10s\n",mess[index].No,mess[index].place,
mess[index].describe,mess[index].name,str);
}
void Mess_Insert()
{
while(1)
{
printf("请输入编号:");
scanf("%d",&mess[num].No);
getchar();
printf("请输入账号位置:");
scanf("%s",&mess[num].place);
getchar();
printf("请输入账号描述:");
scanf("%s",&mess[num].describe);
getchar();
printf("请输入账号名:");
scanf("%s",&mess[num].name);
getchar();
printf("请输入密码:");
char str[20];
scanf("%s",&str);
getchar();
int i;
for(i=0;i<strlen(str);i++)
mess[num].code[i]=str[i]+48;
mess[num].code[i]='\0';
Mess_DisplaySingle(num);
num++;
printf("是否继续?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
void Mess_Modify()
{
while(1)
{
int id;
int index;
printf("请输入要修改的信息的编号:");
scanf("%d",&id);
getchar();
index=Mess_SearchByIndex(id);
if (index==-1)
{
printf("账号不存在!\n");
}
else
{
printf("你要修改的隐私信息为:\n");
Mess_DisplaySingle(index);
printf("-- 请输入新值--\n");
printf("请输入编号:");
scanf("%d",&mess[index].No);
getchar();
printf("请输入账号位置:");
scanf("%s",&mess[index].place);
getchar();
printf("请输入账号名:");
scanf("%s",&mess[index].name);
getchar();
printf("请输入密码:");
char str[20];
scanf("%s",&str);
getchar();
int i;
for(i=0;i<strlen(str);i++)
mess[index].code[i]=str[i]+48;
mess[num].code[i]='\0';
}
printf("是否继续?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
void Mess_Delete()
{
int i;
while(1)
{
int id;
int index;
printf("请输入要删除信息的编号:");
scanf("%d",&id);
getchar();
index=Mess_SearchByIndex(id);
if (index==-1)
{
printf("账号不存在!\n");
}
else
{
printf("你要删除的账号信息为:\n");
Mess_DisplaySingle(index);
printf("是否真的要删除?(y/n)");
if (getchar()=='y')
{
for (i=index;i<num-1;i++)
{
mess[i]=mess[i+1];//把后边的对象都向前移动
}
num--;
}
getchar();
}
printf("是否继续?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
void Mess_Select()
{
while(1)
{
char name[20];
int index;
printf("请输入要查询的账号的部分信息:");
scanf("%s",&name);
getchar();
index=Mess_SearchByName(name);
if (index==-1)
{
printf("账号不存在!\n");
}
else
{
printf("你要查询的账号信息为:\n");
Mess_DisplaySingle(index);
}
printf("是否继续?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
void Mess_Display()
{
int i;
while(1)
{
printf("%-5s%-25s%-20s%-18s%-10s\n","编号","账号位置","账号描述","账号名","密码");
printf("-------------------------------------------------------------------------\n");
for(int j=0;j<num;j++)
{
char str[20];
for(int i=0;i<strlen(mess[j].code);i++)
{
str[i]=mess[j].code[i]-48;
}
str[strlen(mess[j].code)]='\0';
printf("%-5d%-25s%-20s%-18s%-10s\n",mess[j].No,mess[j].place,
mess[j].describe,mess[j].name,str);
}
break;
}
}
void IO_ReadInfo()
{
FILE *fp;
int i;
if ((fp=fopen("c:\\message.txt","rb"))==NULL)//学过文件的这里可以自行修改路径
{
printf("不能打开文件!\n");
return;
}
if (fread(&num,sizeof(int),1,fp)!=1)
{
num=1;
}
else
{
for(i=0;i<num;i++)
{
fread(&mess[i],sizeof(struct Mess),1,fp);
}
}
num=0;
fclose(fp);
}
void IO_WriteInfo()
{
FILE *fp;
int i;
if ((fp=fopen("c:\\message.txt","wb"))==NULL)//学过文件的这里可以自行修改路径
{
printf("不能打开文件!\n");
return;
}
if (fwrite(&num,sizeof(int),1,fp)!=1)
{
printf("写入文件错误!\n");
}
for (i=0;i<num;i++)
{
if (fwrite(&mess[i],sizeof(struct Mess),1,fp)!=1)
{
printf("写入文件错误!\n");
}
}
fclose(fp);
}
int main()
{
if(!Verification())
return 0;
int choice;
IO_ReadInfo();
while(1)
{
/*主菜单*/
printf("\n------ 隐私信息管理系统------\n");
printf("1. 账号信息录入\n");
printf("2. 账号信息修改\n");
printf("3. 删除账号信息\n");
printf("4. 查询账号信息\n");
printf("5. 输出全部账号信息\n");
printf("6. 退出\n");
printf("请选择(1-6):");
scanf("%d",&choice);
getchar();
switch(choice)
{
case 1:
Mess_Insert();
break;
case 2:
Mess_Modify();
break;
case 3:
Mess_Delete();
break;
case 4:
printf("------ 查询菜单 ------\n");
printf("请输入选项编号(1~2)\n");
printf("1----按编号查询\n");
printf("2----按部分账号名查询\n");
int k;
scanf("%d",&k);
getchar ();
switch(k)
{
case 1:Mess_Find();break;
case 2:Mess_Select();break;
}
break;
case 5:
Mess_Display();
break;
case 6:
return 0;
break;
}
IO_WriteInfo();
}
return 0;
}