
需求设计:
1、登录功能 密码错误三次机会 全错提示退出 自定义函数
2、登录成功后 学生信息录入(姓名 学号 性别 成绩) 用户可以选择是否继续录入
3、学生录入完成后可以查询遍历及其增删改查
4、实现存储功能 保存至文件中
退出
#include<stdio.h>
#include<windows.h>
struct stds
{
int id;
char name[20];
char sex[10];
int ach;
struct stds *next;
};
struct stds *head;
struct stds *std;
struct stds *jl;
//读取文件
int read()
{
int n;
FILE *rp;
struct stds *rd;
rp=fopen("./cundang.txt","a+");
rd=(struct stds *)malloc(sizeof(struct stds));
n=fscanf(rp,"%d%s%s%d",&rd->id,rd->name,rd->sex,&rd->ach);
if(n==-1)
{
printf("数据库内无数据\n");
return 0;
}
while(1)
{
if(!feof(rp))
{
rd->next=NULL;
std->next=rd;
std=std->next;
}
else
{
break;
}
rd=(struct stds *)malloc(sizeof(struct stds));
fscanf(rp,"%d%s%s%d",&rd->id,rd->name,rd->sex,&rd->ach);
}
fclose(rp);
printf("数据库加载完成\n");
jl=std;
return 0;
}
//写入文件
int write()
{
FILE *wp;
std=head->next; //从头遍历
if(std==NULL)
{
printf("内容为空,无法保存\n");
return 0;
}
wp=fopen("./cundang.txt","w");
while(std!=NULL)
{
fprintf(wp,"%d %s %s %d\n",std->id,std->name,std->sex,std->ach);
std=std->next;
}
fclose(wp);
printf("保存成功\n");
return 0;
}
//输入内容实现
int input()
{
char n;
struct stds *ed;
std=jl;
while(n=getchar())
{
if(n=='n')
{
break;
}
ed=(struct stds *)malloc(sizeof(struct stds));
printf("请输入学号,姓名,性别,成绩:\n");
scanf("%d%s%s%d",&ed->id,ed->name,ed->sex,&ed->ach);
getchar(); //吸收回车符
ed->next=NULL;
std->next=ed;
std=std->next;
printf("n退出,回车继续输入...\n");
}
jl=std;
return 0;
}
//显示内容实现
int output()
{
int a=0; //判断数据是否有输入
std=head->next; //从头遍历
printf("内容如下:\n");
while(std!=NULL)
{
if(std->next==NULL)
{
jl=std;
}
printf("%d\t%s\t%s\t%d\n",std->id,std->name,std->sex,std->ach);
std=std->next;
a=1;
}
if(a==0) //未输入数据情况
printf("内容为空\n");
return 0;
}
//查找内容实现
int find(int n)
{
std=head->next;
while(std!=NULL)
{
if(std->id==n)
{
printf("%d\t%s\t%s\t%d\n",std->id,std->name,std->sex,std->ach);
std=std->next;
}
else
{
std=std->next;
}
}
return 0;
}
//修改内容实现
int gai(int n)
{
find(n);
std=head->next;
while(std!=NULL)
{
if(std->id==n)
{
printf("输入新信息:\n");
scanf("%d%s%s%d",&std->id,std->name,std->sex,&std->ach);
printf("修改完成");
break;
}
else
{
std=std->next;
}
}
output();
return 0;
}
//删除内容实现
int del(int num)
{
struct stds *dp;
int n;
dp=head;
std=head->next;
n=0;
while(std!=NULL)
{
if(std->id==num)
{
dp->next=std->next;
free(std);
printf("删除后");
n=1;
output();
break;
}
n=2;
dp=std;
std=std->next;
}
if(n==0)
{
printf("数据为空\n");
}
else if(n==2)
{
printf("没找着呀\n");
}
return 0;
}
//登录实现
int login()
{
int i,j;
char username[20],password[20];
char lun[20]="123";
char lpw[20]="123";
for(i=0;i<3;i++)
{
printf("用户名(20字符以内):");
scanf("%s",username);
printf("密 码(20字符以内):");
scanf("%s",password);
if((j=strcmp(lun,username))==0)
{
if((j=strcmp(lpw,password))==0)
{
system("cls");
printf("登陆成功...\n");
return 1;
}
else
{
printf("用户名或密码错误...\n");
}
}
else
{
printf("用户名不存在...\n");
}
}
printf("已输入错误三次,系统自动退出...\n");
return 0;
}
int main()
{
int lg,i,n,gb;
char menu;
head=(struct stds *)malloc(sizeof(struct stds));
std=(struct stds *)malloc(sizeof(struct stds));
gb=0;
head->next=NULL;
jl=std=head;
lg=login();
if(lg)
{
getchar();
read();
printf("欢迎使用\n");
printf("输入内容按1,显示内容按2,查找内容按3,修改内容按4,删除内容按5,6保存,其他退出\n");
while(menu=getchar())
{
printf("继续输入按1,显示内容按2,查找内容按3,修改内容按4,删除内容按5,6保存,其他退出\n");
switch(menu)
{
case '1':system("cls");input();break;
case '2':system("cls");output();break;
case '3':system("cls");printf("输入要查找的ID:\n");scanf("%d",&n);find(n);break;
case '4':system("cls");output();printf("输入要修改的ID:\n");scanf("%d",&n);gai(n);break;
case '5':system("cls");output();printf("输入要删除的ID:\n");scanf("%d",&n);del(n);break;
case '6':write();getchar();break;
case '\n':gb=2;break;
default:system("cls");gb=1;break;
}
if(gb==1)
{
write();
printf("退出成功\n");
break;
}
else if(gb==2)
{
continue;
}
}
}
else
{
printf("欢迎下次使用,再见...\n");
}
printf("感谢使用\n");
system("pause");
return 0;
}
网友评论