#include<stdio.h>
#include<windows.h>
struct stds
{
int id;
char name[20];
char sex;
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("./StudentInfo.dat","a+");
while(!feof(rp))
{
rd=(struct stds *)malloc(sizeof(struct stds));
n=fscanf(rp,"%d%s%d%s\n",&rd->id,&rd->sex,&rd->ach,rd->name);
if(n==-1)
{
printf("数据库内无数据\n");
return 0;
}
rd->next=NULL;
std->next=rd;
std=std->next;
}
fclose(rp);
printf("数据加载完成\n");
jl=std;
return 0;
}
//写入文件
int write()
{
FILE *wp;
std=head->next; //从头遍历
wp=fopen("./cundang.txt","w");
if(std==NULL)
{
printf("数据库已重置\n");
fclose(wp);
return 0;
}
while(std!=NULL)
{
fprintf(wp,"%d %c %d %s\n",std->id,std->sex,std->ach,std->name);
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%c%d%s",&ed->id,&ed->sex,&ed->ach,ed->name);
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%c\t%d\t%s\n",std->id,std->sex,std->ach,std->name);
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%c\t%d\t%s\n",std->id,std->sex,std->ach,std->name);
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%c%d%s\n",&std->id,&std->sex,&std->ach,std->name);
printf("修改完成");
break;
}
else
{
std=std->next;
}
}
output();
return 0;
}
//删除内容实现
int del(int num)
{
struct stds *dp;
dp=head;
std=head->next;
if(std==NULL)
{
printf("数据为空\n");
return 0;
}
while(std!=NULL)
{
if(std->id==num)
{
dp->next=std->next;
free(std);
printf("删除后");
output();
return 0;
}
dp=std;
std=std->next;
}
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("用户名(123):");
scanf("%s",username);
printf("密 码(123):");
scanf("%s",password);
if((j=strcmp(lun,username))==0)
{
if((j=strcmp(lpw,password))==0)
{
system("cls");
printf("登陆成功...\n\n");
return 1;
}
else
{
printf("用户名或密码错误...\n\n");
}
}
else
{
printf("用户名不存在...\n\n");
}
}
printf("已输入错误三次,系统自动退出...\n\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;
}

image.png

image.png
网友评论