1、使用fscanf和fprintf实现登录注册界面,登录成功显示学生管理系统菜单界面。
2、学生信息结构体(学号,姓名,年龄)
3、界面功能包含:录入学生信息,输出学生信息,任意位置删除学生信息,任意位置插入学生信息,任意位置修改学生信息,任意位置查找学生信息,表头插入一个学生,表尾插入一个学生信息,按照姓名查找学生并删除,按照年龄查找学生并修改其学号为10086。
4、所有功能都需要人为输入,不能写死参数。
fun.h
#ifndef _STU_
#define _STU_
#include <myhead.h>
typedef struct
{
int id;
char name[20];
int age;
}stu,*Pstu;
typedef struct node
{
stu data;
int len;
struct node *next;
}Link,*Plink;
int regist();
int login();
Plink apply();
Plink create();
void link_input(Plink);
int link_output(Plink);
void link_pos_del(Plink);
void link_pos_insert(Plink);
void link_pos_change(Plink);
void link_pos_find(Plink);
void link_head(Plink);
void link_rear(Plink);
void link_name_del(Plink);
void link_age_id(Plink);
#endif
main.c
#include "fun.h"
int main(int argc, const char *argv[])
{
int k=-1;
//账号注册登录界面
while(1)
{
printf("\t\t1.注册\n");
printf("\t\t2.登录\n");
printf("\t\t0.退出\n");
int ch;
printf("输入选择的功能:");
scanf("%d",&ch);
getchar();
switch(ch)
{
case 1:
//注册函数
regist();
break;
case 2:
{
//登录函数,并接受登录是否成功的返回值
int flag=login();
if(flag==0)
{
k=1;
}
}
break;
case 0:
{
printf("退出登录页面成功\n");
exit(0);
}
}
//成功登录后,跳出登录界面
if(k==1)
{
break;
}
}
if(k==1)
{
//初始化单链表函数
Plink L = create();
//学生管理系统界面
while(1)
{
printf("\t\t1.录入学生信息\n");
printf("\t\t2.输出学生信息\n");
printf("\t\t3.任意位置删除学生信息\n");
printf("\t\t4.任意位置插入学生信息\n");
printf("\t\t5.任意位置修改学生信息\n");
printf("\t\t6.任意位置查找学生信息\n");
printf("\t\t7.表头插入一个学生\n");
printf("\t\t8.表尾插入一个学生信息\n");
printf("\t\t9.按照姓名查找学生并删除\n");
printf("\t\t10.按照年龄查找学生并修改其学号为10086\n");
printf("\t\t0.退出程序\n");
int ch;
printf("输出选择的功能:");
scanf("%d",&ch);
//学生管理功能函数调用
switch(ch)
{
case 1:
link_input(L);//录入学生信息
break;
case 2:
link_output(L);//输出学生信息
break;
case 3:
link_pos_del(L);//任意位置删除学生信息
break;
case 4:
link_pos_insert(L);//任意位置插入学生信息
break;
case 5:
link_pos_change(L);//任意位置修改学生信息
break;
case 6:
link_pos_find(L);//任意位置查找学生信息
break;
case 7:
link_head(L);//表头插入一个学生
break;
case 8:
link_rear(L);//表尾插入一个学生信息
break;
case 9:
link_name_del(L);//按照姓名查找学生并删除
break;
case 10:
link_age_id(L);//按照年龄查找学生并修改其学号为10086
break;
case 0:
{
printf("成功退出\n");
exit(0);//结束程序
}
break;
}
}
}
return 0;
}
fun.c
#include "fun.h"
//注册账号
int regist()
{
//账号
char name[20];
//密码
char code[20];
//输入账户密码到文件中
printf("请输入注册账号:");
fgets(name,sizeof(name),stdin);
printf("请设置密码:");
fgets(code,sizeof(code),stdin);
//将最后的换行转为\0,\0为字符串结束标识
name[strlen(name)-1]='\0';
code[strlen(code)-1]='\0';
//创建文件,并把密码保存到可以自动生成且可保存多个账号密码的user文件中
FILE *fp = fopen("./user","a");
if(fp==NULL)
{
perror("fopen");
regist -1;
}
fprintf(fp,"%s %s ",name,code);
printf("注册账号成功\n");
fclose(fp);
return 0;
}
//登录系统
int login()
{
char name[20],dname[20];
char code[20],dcode[20];
printf("请输入账号:");
fgets(dname,sizeof(dname),stdin);
printf("请输入密码:");
fgets(dcode,sizeof(dcode),stdin);
dname[strlen(dname)-1]='\0';
dcode[strlen(dcode)-1]='\0';
FILE *fp = fopen("./user","r");
if(fp==NULL)
{
perror("fopen");
return -1;
}
int flag=0;
while(1)
{
int res = fscanf(fp,"%s %s",name,code);
if(res<0)
{
break;
}
if(strcmp(name,dname)==0 && strcmp(code,dcode)==0)
{
printf("登录成功\n");
flag=1;
}
}
if(flag==0)
{
printf("账号或密码错误\n");
return -1;
}
return 0;
}
//申请节点空间
Plink apply()
{
Plink p=malloc(sizeof(Link));
if(p==NULL)
{
return NULL;
}
return p;
}
//创建链表节点
Plink create()
{
Plink p=apply();
if(p==NULL)
{
printf("链表初始化失败\n");
return NULL;
}
p->len=0;
p->next=NULL;
printf("链表初始化成功\n");
return p;
}
//1.录入学生信息
void link_input(Plink L)
{
int n;
printf("请输入输入学生的个数:");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("请输入第%d个学生的信息\n",i+1);
Plink p = apply();
printf("\tid:");
scanf("%d",&p->data.id);
printf("\tname:");
scanf("%s",p->data.name);
printf("\tage:");
scanf("%d",&p->data.age);
p->next=L->next;
L->next=p;
L->len++;
}
printf("信息录入成功\n");
}
//2.输出学生信息
int link_output(Plink L)
{
if(L->len==0 || L==NULL)
{
printf("查询失败,无学生信息\n");
return 0;
}
Plink t = L;
printf("\tid\tname\tage\n");
for(int i=0;i<L->len;i++)
{
t=t->next;
printf("\t%d\t%s\t%d\n",t->data.id,t->data.name,t->data.age);
}
printf("已输出全部学生信息\n");
return 0;
}
//3.任意位置删除学生信息
void link_pos_del(Plink L)
{
int pos;
printf("请输入要删除信息的位置:");
scanf("%d",&pos);
if(L==NULL || L->len==0 || pos<1 || pos>L->len)
{
printf("删除失败\n");
}
else
{
Plink t=L;
for(int i=0;i<pos-1;i++)
{
t=t->next;
}
Plink Q=t->next;
t->next=Q->next;
free(Q);
Q==NULL;
L->len--;
printf("第%d个位置信息删除成功\n",pos);
}
}
//4.任意位置插入学生信息
void link_pos_insert(Plink L)
{
int pos;
printf("请输入要插入信息的位置:");
scanf("%d",&pos);
if(L==NULL || pos<1 || pos>L->len+1)
{
printf("删除失败\n");
}
else
{
Plink p = apply();
Plink t=L;
for(int i=0;i<pos-1;i++)
{
t=t->next;
}
printf("\tid:");
scanf("%d",&p->data.id);
printf("\tname:");
scanf("%s",p->data.name);
printf("\tage:");
scanf("%d",&p->data.age);
p->next=t->next;
t->next=p;
L->len++;
printf("第%d个位置信息插入成功\n",pos);
}
}
//5.任意位置修改学生信息
void link_pos_change(Plink L)
{
int pos;
printf("请输入要修改信息的位置:");
scanf("%d",&pos);
if(L==NULL || L->len==0 || pos<1 || pos>L->len)
{
printf("修改失败\n");
}
else
{
Plink t=L;
for(int i=0;i<pos;i++)
{
t=t->next;
}
printf("该位置信息为:\n");
printf("\tid\tname\tage\n");
printf("\t%d\t%s\t%d\n",t->data.id,t->data.name,t->data.age);
printf("请输入修改后的各项数据:\n");
printf("\tid:");
scanf("%d",&t->data.id);
printf("\tname:");
scanf("%s",t->data.name);
printf("\tage:");
scanf("%d",&t->data.age);
}
printf("修改成功\n");
}
//6.任意位置查找学生信息
void link_pos_find(Plink L)
{
int pos;
printf("请输入要查询信息的位置:");
scanf("%d",&pos);
if(L==NULL || L->len==0 || pos<1 || pos>L->len)
{
printf("删除失败\n");
}
else
{
Plink t = L;
printf("\tid\tname\tage\n");
for(int i=0;i<pos;i++)
{
t=t->next;
}
printf("\t%d\t%s\t%d\n",t->data.id,t->data.name,t->data.age);
printf("已输出第%d个位置的学生信息\n",pos);
}
}
//7.头插一个学生信息
void link_head(Plink L)
{
if(L==NULL)
{
printf("插入信息失败\n");
}
else
{
printf("请输入插入学生的信息\n");
Plink p = apply();
printf("\tid:");
scanf("%d",&p->data.id);
printf("\tname:");
scanf("%s",p->data.name);
printf("\tage:");
scanf("%d",&p->data.age);
p->next=L->next;
L->next=p;
L->len++;
printf("表头插入学生信息成功\n");
}
}
//8.尾插一个学生信息
void link_rear(Plink L)
{
if(L==NULL)
{
printf("插入学生信息失败\n");
}
else
{
printf("请输入插入学生的信息\n");
Plink p = apply();
printf("\tid:");
scanf("%d",&p->data.id);
printf("\tname:");
scanf("%s",p->data.name);
printf("\tage:");
scanf("%d",&p->data.age);
Plink t=L;
for(int i=0;i<L->len;i++)
{
t = t->next;
}
p->next=NULL;
t->next=p;
L->len++;
printf("表尾插入学生信息成功\n");
}
}
//9.按照姓名查找学生并删除
void link_name_del(Plink L)
{
if(L==NULL || L->len==0)
{
printf("查找失败\n");
}
else
{
char a[20];
printf("请输入要删除学生的姓名:");
scanf("%s",a);
Plink t = L;
int count =0;
for(int i=0;i<L->len;i++)
{
t=t->next;
if(strcmp(a,t->data.name)==0)
{
count=i+1;
break;
}
}
t=L;
for(int i=0;i<count-1;i++)
{
t=t->next;
}
Plink Q=t->next;
t->next=Q->next;
free(Q);
Q==NULL;
L->len--;
printf("信息删除成功\n");
}
}
//10.按照年龄查找学生并修改其学号为10086
void link_age_id(Plink L)
{
if(L==NULL || L->len==0)
{
printf("查找失败\n");
}
else
{
int a;
printf("请输入要修改学号学生的age:");
scanf("%d",&a);
Plink t = L;
int count =0;
for(int i=0;i<L->len;i++)
{
t=t->next;
if(a==t->data.age)
{
count=i+1;
break;
}
}
t=L;
for(int i=0;i<count;i++)
{
t=t->next;
}
t->data.id=10086;
printf("修改id成功\n");
}
}
标签:单链,界面,Plink,管理系统,int,学生,link,printf,data
From: https://blog.csdn.net/m0_72110718/article/details/143635480