设置登录密码,登录学生管理系统,实现的功能一共有七个: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#include #include //学生信息结构体 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,否......2n"); 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,否......2n"); 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("%dt%st%st%dt%fn",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("%dt%st%st%dt%fn",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("%dt%st%st%dt%fn",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("%dt%st%st%dt%fn",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; }
运行结果如下图所示:



