设置登录密码,登录学生管理系统,实现的功能一共有七个:1.添加学生信息,2.删除学生信息,3.修改学生信息,4.查看单个学生信息,5.学生信息排序,6.遍历学生信息,7.插入学生信息。
首先定义结构体,里面包含5个信息,学生姓名,学号,性别,年龄,成绩。
//学生信息结构体
struct Stu{
char name[20];
int id;
int age;
int sex; //性别
float score;
};//数据域
定义结构体指针
//节点结构体
struct Node{
struct Stu student; //数据
struct Node *next; //指针指向下一空间
};
完善了登录系统,设置密码,具体实现代码如下所示:
int main()
{
int i=0,f=0;
char mima[20]={"666666"}; //密码可以直接设定,也可以手动输入设置密码
char password[20] = {0};
for (i = 0; i < 3; i++)
{
f++;
printf("请输入密码:");
scanf("%s",password); //字符串类型%s,数组就是一个地址,不用取地址&
if (0 == strcmp(password,mima)) //strcmp函数比较两个字符串,相同返回0,不相同返回1
{
程序段1;
...........
}
else
{
printf("密码输入错误,您还有%d次输入机会!\n",3-f);
}
}
//输入密码完成后,判断输入的次数是否小于等于三次
if (i < 3)
{
printf("登录成功\n");
}
else
{
printf("退出程序\n");
}
return 0;
}
完整实现代码如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//学生信息结构体
struct Stu{
char name[20];
int id;
int age;
char sex[2]; //性别
float score;
};//数据域
//节点结构体
struct Node{
struct Stu student; //数据
struct Node *next; //指针指向下一空间
}; // 指针域
enum Tag{quit,add,del,change,find,rank,print,charu};
int count;
void menu(); //菜单
void Add(struct Node *head); //1.添加学生信息
void Del(struct Node *head); //2.删除学生信息
void Change(struct Node *head); //3.修改学生信息
void Find(struct Node *head); //4.查看单个学生信息
void Rank(struct Node *head); //5.学生信息排序
void Print(struct Node *head); //6.遍历学生信息
void Charu(struct Node *head); //7.插入学生信息
int main()
{
int i=0,f=0;
char mima[20]={"666666"}; //密码可以直接设定,也可以手动输入设置密码
char password[20] = {0};
for (i = 0; i < 3; i++)
{
f++;
printf("请输入密码:");
scanf("%s",password);
if (0 == strcmp(password,mima))
{
struct Node *head = (struct Node *)malloc(sizeof(struct Node)); //给头结点head创建一个节点空间
memset(head,0,sizeof(struct Stu)); //初始化节点
head->next = NULL;
while(1)
{
int num;
menu();
printf("请输入要执行的操作!\n");
scanf("%d",&num);
switch(num)
{
case add:
Add(head);
break;
case del:
Del(head);
break;
case change:
Change(head);
break;
case find:
Find(head);
break;
case rank:
Rank(head);
break;
case print:
Print(head);
break;
case charu:
Charu(head);
break;
case quit:
return 0;
default:printf("输入有误,请重新输入!\n");
}
}
}
else
{
printf("密码输入错误,您还有%d次输入机会!\n",3-f);
}
}
if (i < 3)
{
printf("登录成功\n");
}
else
{
printf("退出程序\n");
}
return 0;
}
//学生管理系统菜单
void menu()
{
printf("*********欢迎来到学生管理系统*********\n");
printf("*********1.添加学生信息*********\n");
printf("*********2.删除学生信息*********\n");
printf("*********3.修改学生信息*********\n");
printf("*********4.查看单个学生信息*********\n");
printf("*********5.学生信息排序*********\n");
printf("*********6.遍历学生信息*********\n");
printf("*********7.插入学生信息*********\n");
printf("*********0.退出学生管理系统*********\n");
}
//1.添加学生信息
void Add(struct Node *head)
{
int n,m;
loop:
printf("请输入要添加的学号!\n");
scanf("%d",&n);
struct Node *temp = head->next;
while(temp != NULL)
{
if(n == temp->student.id)
{
printf("该学号已存在!\n");
return;//无返回值
}
temp = temp->next ;
}
struct Node *new1 = (struct Node *)malloc(sizeof(struct Node));
new1->student.id = n;
printf("请输入要添加的学生姓名!\n");
scanf("%s",new1->student.name);
printf("请输入要添加的学生性别!\n");
scanf("%s",new1->student.sex);
printf("请输入要添加的学生的年龄!\n");
scanf("%d",&new1->student.age);
printf("请输入要添加的学生成绩!\n");
scanf("%f",&new1->student.score);
new1->next =NULL;
temp = head;
while(temp->next != NULL)
{
temp = temp->next ;
}
temp->next = new1;
count++;
printf("该学生信息添加成功!\n");
printf("是否要继续添加? 是......1,否......2\n");
scanf("%d",&m);
if(m == 1)
{
goto loop;
}
else if(m == 2)
{
return;
}
}
//2.删除学生信息
void Del(struct Node *head)
{
struct Node *temp1 = head;
struct Node *temp2 = head->next;
int n,m;
int i,j;
printf("请输入要删除学生的学号!\n");
scanf("%d",&n);
printf("请认真考虑是否要删除? 是......1,否......2\n");
scanf("%d",&m);
if(m == 1)
{
while(temp2 != NULL)
{
if(n == temp2->student.id)
{
temp1->next =temp2->next;
}
temp1 = temp1->next ;
temp2 = temp2->next ;
}
free(temp2);
count--;
printf("删除成功!\n");
}
else if(m == 2)
{
return;
}
}
//3.修改学生信息
void Change(struct Node *head)
{
struct Node *temp = head;
int n;
printf("请输入要修改学生的学号!\n");
scanf("%d",&n);
while(temp != NULL)
{
if(n == temp->student.id)
{
printf("请输入要修改学生的姓名!\n");
scanf("%s",temp->student.name);
printf("请输入要修改的学生性别!\n");
scanf("%s",temp->student.sex);
printf("请输入要修改的学生的年龄!\n");
scanf("%d",&temp->student.age);
printf("请输入要修改学生的成绩!\n");
scanf("%f",&temp->student.score);
}
temp = temp->next ;
}
}
//4.查看单个学生信息
void Find(struct Node *head)
{
struct Node *temp = head;
int n,num;
char str[20]= {0};
int flag = 0;
printf("**********请选择查询方式!***********\n");
printf("**********1.通过学号***********\n");
printf("**********2.通过姓名***********\n");
printf("*******************************\n");
scanf("%d",&num);
if(num == 1)
{
printf("请输入要查看学生的学号!\n");
scanf("%d",&n);
while(temp != NULL)
{
if(n == temp->student.id)
{
flag = 1;
printf("该学生信息为:\n");
printf("学号\t姓名\t性别\t年龄\t成绩\n");
printf("%d\t%s\t%s\t%d\t%f\n",temp->student.id,temp->student.name,temp->student.sex,temp->student.age,temp->student.score);
}
temp = temp->next ;
}
}
else if(num == 2)
{
printf("请输入要查看学生的姓名!\n");
scanf("%s",str);
while(temp != NULL)
{
if(0 ==strcmp(str,temp->student.name))
{
flag = 1;
printf("该学生信息为:\n");
printf("学号\t姓名\t性别\t年龄\t成绩\n");
printf("%d\t%s\t%s\t%d\t%f\n",temp->student.id,temp->student.name,temp->student.sex,temp->student.age,temp->student.score);
}
temp = temp->next ;
}
}
if(flag == 0)
{
printf("查无此人,返回主菜单!\n");
}
}
//5.学生信息排序
void Rank(struct Node *head)
{
struct Node *temp=head->next;
struct Node *temp1=head->next;
struct Node *temp2;
struct Stu stu;
printf("按成绩由高到低排序为:\n");
for(;temp1->next !=NULL;temp1=temp1->next)
{
for(temp2 = temp1->next; temp2 !=NULL; temp2=temp2->next)
{
if(temp1->student.score < temp2->student.score)
{
stu=temp1->student;
temp1->student=temp2->student;
temp2->student=stu;
}
}
}
printf("学号\t姓名\t性别\t年龄\t成绩\n");
while(temp != NULL)
{
printf("%d\t%s\t%s\t%d\t%f\n",temp->student.id,temp->student.name,temp->student.sex,temp->student.age,temp->student.score);
temp = temp->next;
}
}
//6.遍历学生信息
void Print(struct Node *head)
{
printf("共有%d个学生信息\n",count);
printf("学号\t姓名\t性别\t年龄\t成绩\n");
struct Node *temp = head->next;
while(temp != NULL)
{
printf("%d\t%s\t%s\t%d\t%f\n",temp->student.id,temp->student.name,temp->student.sex,temp->student.age,temp->student.score);
temp = temp->next;
}
}
//7.插入学生信息
void Charu(struct Node *head)
{
struct Node *temp = head->next;
int n,flag = 0;
printf("请输入想要插入的学号后边!\n");
scanf("%d",&n);
while(temp != NULL)
{
if(n == temp->student.id)
{
flag = 1;
struct Node *new2 = (struct Node *)malloc(sizeof(struct Node));
printf("请输入要插入的学生学号!\n");
scanf("%d",&new2->student.id);
printf("请输入要插入的学生姓名!\n");
scanf("%s",new2->student.name);
printf("请输入要插入的学生性别!\n");
scanf("%s",new2->student.sex);
printf("请输入要插入的学生年龄!\n");
scanf("%d",&new2->student.age);
printf("请输入要插入的学生成绩!\n");
scanf("%f",&new2->student.score);
new2->next = temp->next ;
temp->next = new2;
printf("该学生信息插入成功!\n");
count++;
}
temp = temp->next ;
}
if(flag == 0)
{
printf("没有此学生,插入错误!\n");
return;
}
return;
}
运行结果如下图所示: