自己写的一个:个人信息管理程序《试试吧!——我很菜!》
#include<stdio.h>#include<stdlib.h>
#include<string.h>
#include<stdio.h>
/*
注释:
本程序运行时包括:信息文件为information.c和权限文件Permissions.c
information.c文件自己建立一个空文件,然后程序中有添加人物信息的操作,按步骤操作!
Permissions.c文件自己建立,文件格式:
菜豆王子//姓名
administrator//权限//administration为管理员用户;其他的任何权限都不能操作其中的一些操作!
nihao//密码
这些可以自己添加;
程序中用了多个goto语句!是为了使用方面;平时不提倡使用goto语句;
由于知识有限做的有点粗糙,请见谅!
添加权限操作
{
权限文件Permissions.c
用户,密码,权限;
}
*/
FILE *f1,*f2;//信息文件指针
char pd;//判断变量
int jl;//记录密码输入次数
struct inform
{
char name[20];//姓名
char age[10];//年龄
char birthday[20];//生日
char idcard[30];//身份证号
char sex[10];//性别
char sub[100];//专业
char qq[10];//QQ号
char number[20];//学号
int pdx;//数据标签:判断数据是否可用;
}inf;//个人信息;
struct people
{
char name[20];
char qx[200];
char password[100];
}p;//权限
//***********************************************************保存操作********************************************
void save()
{
printf("请输入您所要添加的人物信息\n");
f1=fopen("information.c","a+");
printf("姓名:");
scanf("%s",&inf.name);
printf("年龄:");
scanf("%s",&inf.age);
printf("生日:");
scanf("%s",&inf.birthday);
printf("身份证号:");
scanf("%s",&inf.idcard);
printf("性别:");
scanf("%s",&inf.sex);
printf("专业:");
scanf("%s",&inf.sub);
printf("QQ号:");
scanf("%s",&inf.qq);
printf("学号:");
scanf("%s",&inf.number);
printf("输入完毕!");
gc5:
printf("是否保存?Y/N:");
fflush(stdin);
pd=getchar();
if (pd=='Y')
{
inf.pdx=1;
fprintf(f1,"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%d\n",inf.name,inf.age,inf.birthday,inf.idcard,inf.sex,inf.sub,inf.qq,inf.number,inf.pdx);
printf("保存完毕!\n");
}
else if (pd=='N') printf("文本没有保存!\n");
else
{
printf("输入有误,返回重新选择!");
goto gc5;
}
fclose(f1);
}
//********************************************查找操作************************************************
void find()
{
f1=fopen("information.c","r+");
if (f1==NULL) //判断information.c文件是否存在。或信息文件是否能打开!
{
printf("文件无法打开,可能是因为缺少information.c文件!\n");
exit(0);
}
char chname[20];
gc3://错误输出时重新输入时的跳转
printf("请输入您所要查找的人的姓名:");
rewind(f1);//文件指针返回文件首位置
fflush(stdin);
scanf("%s",&chname);//输入要查找的人的姓名
printf("-------------------------------------------------------------------------------\n");
gc4://用于循环查找人物信息
fscanf(f1,"%s%s%s%s%s%s%s%s%d",&inf.name,&inf.age,&inf.birthday,&inf.idcard,&inf.sex,&inf.sub,&inf.qq,&inf.number,&inf.pdx);//文件中的信息
if (inf.pdx==1)
if (strcmp(chname,inf.name)==0)//判断姓名是否相符
{
printf("-------------------------------------------------------------------------------\n");
printf("姓名:%s\n",inf.name);
printf("年龄:%s\n",inf.age);
printf("生日:%s\n",inf.birthday);
printf("身份证号:%s\n",inf.idcard);
printf("性别:%s\n",inf.sex);
printf("专业:%s\n",inf.sub);
printf("QQ号:%s\n",inf.qq);
printf("学号:%s\n",inf.number);
printf("-------------------------------------------------------------------------------\n");
}
else
if (feof(f1))
{
printf("找不到您所要找的对象!\n是否重新输入您所要的查找的姓名:Y/N:");
gc6:
fflush(stdin);
pd=getchar();
printf("-------------------------------------------------------------------------------\n");
switch(pd)
{
case 'Y':goto gc3;break;
case 'N':break;
default:printf("警告:输入错误!请重新输入:Y/N:");goto gc6;
}
}
else goto gc4;
else
if (feof(f1))
{
printf("找不到您所要找的对象!\n是否重新输入您所要的查找的姓名:Y/N:");
fflush(stdin);
pd=getchar();
printf("-------------------------------------------------------------------------------\n");
switch(pd)
{
case 'Y':goto gc3;break;
case 'N':break;
default:printf("警告:输入错误!请重新输入:Y/N:");goto gc6;
}
}
else goto gc4;
fclose(f1);
}
//***********************************************删除操作*********************************
void del()
{
f1=fopen("information.c","r+");
char delname[100];
gc8:
printf("-------------------------------------------------------------------------------\n");
printf("请输入您所要删除的人的姓名:");
rewind(f1);//文件指针返回文件首位置
fflush(stdin);//清空缓存
scanf("%s",&delname);
//k=0;//记录所查找的数据
gc9:
fscanf(f1,"%s%s%s%s%s%s%s%s%d",&inf.name,&inf.age,&inf.birthday,&inf.idcard,&inf.sex,&inf.sub,&inf.number,&inf.qq,&inf.pdx);//文件中的信息
if (inf.pdx==1)
{
if (strcmp(delname,inf.name)==0)//判断姓名是否相符
{//********************必须先判断标签:inf.pdx是否为零;
gc7:
printf("是否执行删除操作:Y/N:");
fflush(stdin);
pd=getchar();
int x=0;
switch(pd)
{
case 'Y':fseek(f1,-1,1);fprintf(f1,"%d",x);//用0覆盖原来的1
printf("已经删除了%s的信息!\n",delname);break;
case 'N':break;
default:printf("警告:输入错误!请重新输入:\n");
printf("-------------------------------------------------------------------------------\n");goto gc7;
}
}
else
if (feof(f1))
{
printf("-------------------------------------------------------------------------------\n");
printf("找不到您所要找的对象!\n");
gc10:
printf("是否重新输入您所要的查找的姓名:Y/N:");
fflush(stdin);
pd=getchar();
printf("-------------------------------------------------------------------------------\n");
switch(pd)
{
case 'Y':goto gc8;break;
case 'N':break;
default:printf("警告:输入错误!请重新输入:\n");
printf("-------------------------------------------------------------------------------\n");goto gc10;
}
}
else goto gc9;//循环查找
}
else
if (feof(f1))
{
printf("-------------------------------------------------------------------------------\n");
printf("找不到您所要找的对象!\n");
gc11:
printf("是否重新输入您所要的查找的姓名:Y/N:");
fflush(stdin);
pd=getchar();
printf("-------------------------------------------------------------------------------\n");
switch(pd)
{
case 'Y':goto gc8;break;
case 'N':break;
default:printf("警告:输入错误!请重新输入:Y/N:");goto gc11;
}
}
else goto gc9;
fclose(f1);
}
//******************************************权限操作******************************************
void per1()//读出文件中的权限信息函数;
{
printf("有以下用户已注册:\n");
printf("********************************************************************************");
f2=fopen("Permissions.c","r+");
for (int i=0;!feof(f2);i++)
{
fscanf(f2,"%s%s%s\n",p.name,p.qx,p.password);//用户名:p.name;权限:p.qx;
printf("用户名:%s\n权限:%s\n",p.name,p.qx);
}
printf("********************************************************************************");
fclose(f2);
}
//******************************************用户注册操作************************************************
void login()
{
char password[100];
f1=fopen("information.c","a+");
f2=fopen("Permissions.c","a+");
printf("-------------------------------------------------------------------------------\n");
printf("请输入注册信息\n");
//注册输入的信息;并保存到文件“information.c”中;
printf("姓名:");
scanf("%s",&inf.name);
printf("密码:");
scanf("%s",&password);
printf("年龄:");
scanf("%s",&inf.age);
printf("生日:");
scanf("%s",&inf.birthday);
printf("身份证号:");
scanf("%s",&inf.idcard);
printf("性别:");
scanf("%s",&inf.sex);
printf("专业:");
scanf("%s",&inf.sub);
printf("QQ号:");
scanf("%s",&inf.qq);
printf("学号:");
scanf("%s",&inf.number);
inf.pdx=1;
fprintf(f1,"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%d\n",inf.name,inf.age,inf.birthday,inf.idcard,inf.sex,inf.sub,inf.qq,inf.number,inf.pdx);
char s[]="user";//新用户权限初始化为user
fprintf(f2,"%s\n%s\n%s\n",inf.name,s,password);
printf("已成功注册!\n请选择您所需要的服务!\n");
fclose(f1);
fclose(f2);
}
int per2()//权限操作函数;
{
char db[]="administrator";//用于与文件中的权限名作对比
f2=fopen("Permissions.c","r+");
char na[20],pw[100];
printf("请输入您的用户名及密码\n");
printf("用户名:");scanf("%s",&na);// na 输入的用户名
jl=1;
gc12:
//if (jl<=3)
//{
printf("密码:");scanf("%s",&pw);// pw 输入的密码
gc16:
fscanf(f2,"%s%s%s\n",p.name,p.qx,p.password);//查找用户
gc17: if (strcmp(na,p.name)==0)
if (strcmp(pw,p.password)==0)
if (strcmp(p.qx,db)==0) return (2);
else return(1);
else
{
if (jl<3)
{
printf("密码错误!请重新输入!:");
jl++;
scanf("%s",&pw);goto gc17;
}
else
{
printf("-------------------------------------------------------------------------------\n");
printf("密码输入超过三次!\n您无权操作!\n");
printf("-------------------------------------------------------------------------------\n");
return(0);
}
}
else
{
if (feof(f2))
{
printf("该用户还未注册,是否注册新用户:Y/N:");
gc13:
fflush(stdin);
pd=getchar();
switch(pd)
{
case 'Y':login();return(-1);break;//注册用户;
case 'N':printf("退出系统!\n");return(0);break;
gc14: default:
{
printf("输入错误,请重新输入:Y/N:");pd=getchar();
switch(pd)
{
case 'Y':goto gc13;break;
case 'N':return(0);break;
default:goto gc14;
}
}
}
}
else goto gc16;
}
}
//****************************************程序主体****************************************************
void main()
{
char choose;
printf("-------------------------------------------------------------------------------\n\n");
printf(" 你好我是菜豆:欢迎使用!\n\n");
printf("-------------------------------------------------------------------------------\n\n");
per1();//输出用户名及权限的处理函数
int xx;//xx就是一判断
xx=per2();//用户权限操作
if (xx==0)
{
printf(" ######################\n");
printf("############################# 谢谢使用!呵呵…… ##############################\n");
printf(" ######################\n");
exit(0);
}
else if (xx==-1) xx=1;
gc1: //当用户输入错误时返回重新选择并输入。
printf("-------------------------------------------------------------------------------\n");
printf("1:录入个人身份信息;\n2:查找个人身份信息;\n3:删除个人身份信息;\n4:退出。\n");
printf("-------------------------------------------------------------------------------\n");
printf("请选择你所需要的服务:");
fflush(stdin);
choose=getchar();
printf("-------------------------------------------------------------------------------\n");
switch(choose)
{
case '1':if (xx==2) save();
else
{
printf("权限不足!\n重新选择服务\n");
goto gc1;
}
break;
case '2':find();break;
case '3':if (xx==2) del();
else
{
printf("权限不足!\n重新选择服务\n");
goto gc1;
}
break;
case '4':printf(" ######################\n");
printf("############################# 谢谢使用!呵呵…… ##############################\n");
printf(" ######################\n");exit(0);break;
default :printf("警告:输入错误!\n请重新输入\n");goto gc1;
}
gc2:
printf("-------------------------------------------------------------------------------\n");
printf("是否继续操作:Y/N:");
fflush(stdin);//****清空缓存
scanf("%c",&pd);//pd是判断是否继续操作的变量
printf("-------------------------------------------------------------------------------\n");
switch(pd)
{
case 'Y':goto gc1;break;
case 'N':printf(" ######################\n");
printf("############################# 谢谢使用!呵呵…… ##############################\n");
printf(" ######################\n");exit(0);break;
default:printf("警告:输入错误!\n请重新输入\n");goto gc2;
}
fclose(f2);
}
//**************知识有限,做得有点粗糙,请见谅!***********************