目标:
利用所学的C语言和函数知识去实现
先做管理员对学生操作(增删改查排序)这条线完成
comm.h
list.h list.c
student.h student.c
menu.h menu.c(只写学生相关)
main.c
程序调试
1) 必须写完一个函数,调试一个函数
2) 出现段错误时必须使用gdb调试
学习内容:
按照图片实现:
学习时间:
三天时间去实现
代码部分:
.h文件
#ifndef __nmenu__XJT__
#define __nmenu__XJT__
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct nmenu
{
struct nmenu* next;
struct student* data;
}nmenu,*pnmenu;
typedef struct student //学生结构体定义
{
char cid[16]; //学生学号定义
char name[32]; //学生姓名
//char pass[16]; //学生密码
int age; //学生年龄
int gmath; //学生数学成绩
int glang; //C语言成绩
int gphil; //语文成绩
int gsum; //总分
//int order; //排序
char classid[10]; //班号
struct student* next;
}stu_t;
void password(nmenu* phead); //管理员密码
void student_main_surface(nmenu* phead); //管理员的主目录
nmenu* creat_head(); //创建头节点
void student_information_input(nmenu* phead); //学生信息输入界面
void student_information_seek(nmenu* phead); //学生信息查找界面
nmenu* find(nmenu* phead); //学生cid查找函数
nmenu* find_name(nmenu* phead); //学生姓名查找函数
nmenu* find_age(nmenu* phead); //学生年龄查找函数
void seek_cid(nmenu* phead); //学生cid查找输入界面
void seek_name(nmenu* phead); //学生姓名查找输入界面
void seek_age(nmenu* phead); //学生年龄查找输入界面
void input_student_input(nmenu* phead); //打印按cid查找的当前学生信息
void input_student_name(nmenu* phead); //打印按姓名查找的当前学生信息
void input_student_age(nmenu* phead); //打印按年龄查找的当前学生信息
void delete_student_information(nmenu* phead); //学生的信息删除界面
void delete_cid(nmenu* phead); //输入学生的cid删除学生的信息
void delete_information(nmenu* phead); //删除需要删除的学生信息
nmenu* dfind_cid(nmenu* phead); //按cid查找需要删除的学生信息
nmenu* dfind_age(nmenu* phead); //按年龄查找需要删除的学生信息
void modify_student_information(nmenu* phead); //学生的信息修改界面
void modify_cid(nmenu* phead); //输入学生的cid修改学生的信息界面
void modify_information(nmenu* phead); //打印修改后的学生信息
void modify_information_age(nmenu* phead); //打印修改后的学生信息
void modify_age(nmenu* phead); //输入学生的cid修改学生的信息界面
void sort_student_information(nmenu* phead); //学生排序界面
int size_data(nmenu* phead,int size); //得出存入数据的个数
void sortid(nmenu *phead); //按年龄排序函数
void browse_information(nmenu* phead); //浏览全部学生信息的界面
void password_stu(nmenu* phead); //学生密码
void stu_student_main_surface(nmenu* phead); //学生系统主界面
void look_student_information(nmenu* phead); //根据cid查看自我学生信息
void age_modify_student_information(nmenu* phead); //修改个人信息年龄
void topxt(nmenu* phead); //双系统界面
#endif
子函数文件:
代码都能实现,但由于结构体数据太多没有一一书写,可以参考内容里面代码自行填写,思路都是一样的。
#include"nmenu.h"
/// @brief 设置管理员密码
/// @param phead 头节点
void password(nmenu* phead)
{
char srr[20]={"123456"};
char arr[20]={0};
printf("请输入你的密码:");
scanf("%s",arr);
int res=strcmp(arr,srr);
if(res==0)
{
student_main_surface(phead);
}
else
{
exit(0);
}
}
/// @brief 管理员管理系统主界面
/// @param phead 选择相应模式
void student_main_surface(nmenu* phead)
{
system("clear");
printf("\n");
printf("********************************\n");
printf("| |\n");
printf("| 管理员管理系统主界面 |\n");
printf("* 0.返回 *\n");
printf("* 1.录入学生信息 *\n");
printf("| 2.查找学生信息 |\n");
printf("* 3.删除学生信息 *\n");
printf("| 4.修改学生的信息 |\n");
printf("* 5.全部学生信息直接浏览 *\n");
printf("* 6.排序学生信息 *\n");
printf("| 7.退出系统 |\n");
printf("| |\n");
printf("********************************\n");
printf("请输入一个数字选择功能:");
int a;
scanf("%d",&a);
printf("\n");
if(a>7||a<0)
{
printf("输入错误,不再要求之内!\n");
printf("即将再次进入主界面!\n");
sleep(1);
student_main_surface(phead);
}
else
{
if(a==0)
{
topxt(phead); //学生的信息输入 参数:代表w[]的当前空位
}
else if(a==1)
{
student_information_input(phead); //学生的信息输入 参数:代表w[]的当前空位
}
else if(a==2)
{
student_information_seek(phead);//学生的信息查找
}
else if(a==3)
{
delete_student_information(phead); //删除学生的信息
}
else if(a==4) //修改学生的信息
{
modify_student_information(phead);
}
else if(a==5)
{
browse_information(phead); //浏览所有的学生的信息
}
else if(a==6) //修改学生的信息
{
sort_student_information(phead);
}
else if(a==7)
{
printf("感谢您的使用,欢迎再次使用!再见!\n");
sleep(1);
return;
}
}
}
/// @brief 创建头节点
/// @return 头节点的地址
nmenu* creat_head()
{
nmenu* phead=(nmenu*)malloc(sizeof(nmenu));
if(phead==NULL)
{
perror("null");
exit(-1);
}
phead->data=NULL;
phead->next=NULL;
return phead;
}
/// @brief 学生信息输入界面
/// @param phead 头节点
void student_information_input(nmenu* phead)
{
system("clear");
printf("===========================================\n");
printf("= 欢迎来到学生信息输入界面 =\n");
printf("===========================================\n");
nmenu* pnew=(nmenu*)malloc(sizeof(nmenu));
pnew->next=phead->next;
phead->next=pnew;
pnew->data = malloc(sizeof(struct student));
printf("请输入学生的cid:");
scanf("%s",pnew->data->cid);
printf("请输入学生的姓名:");
scanf("%s",pnew->data->name);
printf("请输入学生的年龄:");
scanf("%d",&pnew->data->age);
//printf("请输入学生的密码:");
//scanf("%s",pnew->data->pass);
printf("请输入学生的数学成绩:(成绩范围0-100):");
scanf("%d",&pnew->data->gmath);
printf("请输入学生的c语言成绩:(成绩范围0-100):");
scanf("%d",&pnew->data->glang);
printf("请输入学生的语文成绩:(成绩范围0-100):");
scanf("%d",&pnew->data->gphil);
//printf("请输入学生的总分:");
//scanf("%d",&pnew->data->gsum);
//printf("请输入学生的排序:");
//scanf("%d",&pnew->data->order);
printf("请输入学生的班号:");
scanf("%s",pnew->data->classid);
pnew->data->gsum=pnew->data->gmath+pnew->data->glang+pnew->data->gphil;
printf("学生总成绩为%d",pnew->data->gsum);
printf("任意输入加回车返回主界面!\n");
getchar();
getchar();
student_main_surface(phead);
}
/// @brief 学生的信息查找界面
/// @param phead 头节点
void student_information_seek(nmenu* phead)
{
system("clear");
int a;
printf("==========================================\n");
printf("* 学生的信息查找界面 *\n");
printf("==========================================\n");
printf("* 1.按学生的cid查找 *\n");
printf("------------------------------------------\n");
printf("* 2.按学生的姓名查找 *\n");
printf("------------------------------------------\n");
printf("* 3.按学生的年龄查找 *\n");
printf("------------------------------------------\n");
printf("* 4.按学生的数学成绩查找 *\n");
printf("------------------------------------------\n");
printf("* 5.按学生的c语言成绩查找 *\n");
printf("------------------------------------------\n");
printf("* 6.按学生的语文成绩查找 *\n");
printf("------------------------------------------\n");
printf("* 7.按学生的班号查找 *\n");
printf("------------------------------------------\n");
printf("* 8.按学生的总分查找 *\n");
printf("------------------------------------------\n");
printf("* 9.退出! *\n");
printf("==========================================\n");
printf("请输入数字来选择功能:");
scanf("%d",&a);
if(a==1)
{
seek_cid(phead);
}
else if(a==2)
{
seek_name(phead);
}
else if(a==3)
{
seek_age(phead); //学生的主目录
}
/*else if(a==4)
{
Seek_gmath(phead);
}
else if(a==5)
{
Seek_glang(phead);
}
else if(a==6)
{
Seek_gphil(phead);
}
else if(a==7)
{
Seek_gsum(phead);
}
else if(a==8)
{
Seek_classid(phead);
}*/
else if(a==9)
{
student_main_surface(phead);
}
else
{
student_main_surface(phead); //学生的主目录
}
}
/// @brief 查找当前cid所对应的节点
/// @param phead 头节点
/// @return 返回找出节点的位置
nmenu* find(nmenu* phead)
{
char arr[16]={0};
nmenu* pnode=phead->next;
printf("请输入id:");
scanf("%s",arr);
while(pnode)
{
int i=strcmp(pnode->data->cid,arr);
if(i==0)
{
return pnode;
}
pnode=pnode->next;
}
return NULL;
}
/// @brief 输入学生的id查找学生的信息界面
/// @param phead 头节点
void seek_cid(nmenu* phead)
{
system("clear");
printf("===================================================\n");
printf("* 欢迎进入输入学生的id查找学生的信息 *\n");
printf("===================================================\n");
input_student_input(phead);
printf("任意键输入加回车 回到上一个界面!\n");
getchar();
getchar();
student_information_seek(phead);//学生的信息查找
}
/// @brief 打印查找出的当前节点的数据
/// @param phead 头节点
void input_student_input(nmenu* phead)
{
nmenu* pnode=find(phead);
if(pnode==NULL)
{
printf("此学生的信息没有!\n");
}
else
{
printf("学生的cid:%s\n",pnode->data->cid);
printf("学生的姓名:%s\n",pnode->data->name);
printf("学生的年龄:%d\n",pnode->data->age);
printf("学生的数学成绩:%d\n",pnode->data->gmath);
printf("学生的c语言:%d\n",pnode->data->glang);
printf("学生的语文成绩:%d\n",pnode->data->gphil);
printf("学生的总成绩:%d\n",pnode->data->gsum);
printf("学生的班号:%s\n",pnode->data->classid);
}
}
/// @brief 输入学生的name查找学生的信息界面
/// @param phead 头节点
void seek_name(nmenu* phead)
{
system("clear");
printf("===================================================\n");
printf("* 欢迎进入输入学生的name查找学生的信息 *\n");
printf("===================================================\n");
input_student_name(phead);
printf("任意键输入加回车 回到上一个界面!\n");
getchar();
getchar();
student_information_seek(phead);//学生的信息查找
}
/// @brief 打印姓名查找到的当前节点的数据
/// @param phead 头节点
void input_student_name(nmenu* phead)
{
nmenu* pnode=find_name(phead);
if(pnode==NULL)
{
printf("此学生的信息没有!\n");
}
else
{
printf("学生的cid:%s\n",pnode->data->cid);
printf("学生的姓名:%s\n",pnode->data->name);
printf("学生的年龄:%d\n",pnode->data->age);
printf("学生的数学成绩:%d\n",pnode->data->gmath);
printf("学生的c语言:%d\n",pnode->data->glang);
printf("学生的语文成绩:%d\n",pnode->data->gphil);
printf("学生的总成绩:%d\n",pnode->data->gsum);
printf("学生的班号:%s\n",pnode->data->classid);
}
}
/// @brief 查找相应姓名的节点
/// @param phead 头节点
/// @return 返回相应节点的地址
nmenu* find_name(nmenu* phead)
{
char arr[32]={0};
nmenu* pnode=phead->next;
printf("请输入name:");
scanf("%s",arr);
while(pnode)
{
int l=strcmp(pnode->data->name,arr);
if(l==0)
{
return pnode;
}
pnode=pnode->next;
}
return NULL;
}
/// @brief 输入学生的age查找学生的信息界面
/// @param phead 头节点
void seek_age(nmenu* phead)
{
system("clear");
printf("===================================================\n");
printf("* 欢迎进入输入学生的age查找学生的信息 *\n");
printf("===================================================\n");
input_student_age(phead);
printf("任意键输入加回车 回到上一个界面!\n");
getchar();
getchar();
student_information_seek(phead);//学生的信息查找
}
/// @brief 打印查找到的年龄所对应的数据
/// @param phead 头节点
void input_student_age(nmenu* phead)
{
nmenu* pnode=find_age(phead);
if(pnode==NULL)
{
printf("此学生的信息没有!\n");
}
else
{
printf("学生的cid:%s\n",pnode->data->cid);
printf("学生的姓名:%s\n",pnode->data->name);
printf("学生的年龄:%d\n",pnode->data->age);
printf("学生的数学成绩:%d\n",pnode->data->gmath);
printf("学生的c语言:%d\n",pnode->data->glang);
printf("学生的语文成绩:%d\n",pnode->data->gphil);
printf("学生的总成绩:%d\n",pnode->data->gsum);
printf("学生的班号:%s\n",pnode->data->classid);
}
}
/// @brief 按年龄查找当前需要的节点
/// @param phead 头节点
/// @return 返回相应数据
nmenu* find_age(nmenu* phead)
{
int i=0;
nmenu* pnode=phead->next;
printf("请输入age:");
scanf("%d",&i);
while(pnode)
{
if(i==pnode->data->age)
{
return pnode;
}
pnode=pnode->next;
}
return NULL;
}
/// @brief 浏览全部学生信息的界面
/// @param phead 头节点
void browse_information(nmenu* phead)
{
if(phead == NULL)
{
printf("perror\n");
exit(-2);
}
system("clear");
printf("===============================================\n");
printf(" 5.欢迎来到浏览全部学生信息的界面 \n");
printf("===============================================\n");
nmenu* pnode = phead->next;
while(pnode)
{
printf("学生的cid:%s\n",pnode->data->cid);
printf("学生的姓名:%s\n",pnode->data->name);
printf("学生的年龄:%d\n",pnode->data->age);
printf("学生的数学成绩:%d\n",pnode->data->gmath);
printf("学生的c语言:%d\n",pnode->data->glang);
printf("学生的语文成绩:%d\n",pnode->data->gphil);
printf("学生的总成绩:%d\n",pnode->data->gsum);
printf("学生的班号:%s\n",pnode->data->classid);
printf("\n");
pnode = pnode->next;
}
printf("任意键加回车,返回主界面!\n");
getchar();
getchar();
student_main_surface(phead);
}
/// @brief 学生的信息删除界面
/// @param phead 头节点
void delete_student_information(nmenu* phead)
{
system("clear");
int a;
printf("==========================================\n");
printf("* 学生的信息删除界面 *\n");
printf("==========================================\n");
printf("* 1.按学生的cid删除 *\n");
printf("------------------------------------------\n");
printf("* 2.按学生的姓名删除 *\n");
printf("------------------------------------------\n");
printf("* 3.按学生的年龄删除 *\n");
printf("------------------------------------------\n");
printf("* 4.按学生的数学成绩删除 *\n");
printf("------------------------------------------\n");
printf("* 5.按学生的c语言成绩删除 *\n");
printf("------------------------------------------\n");
printf("* 6.按学生的语文成绩删除 *\n");
printf("------------------------------------------\n");
printf("* 7.按学生的班号删除 *\n");
printf("------------------------------------------\n");
printf("* 8.按学生的总分删除 *\n");
printf("------------------------------------------\n");
printf("* 9.退出! *\n");
printf("==========================================\n");
printf("请输入数字来选择功能:");
scanf("%d",&a);
if(a==1)
{
delete_cid(phead);
}
/*else if(a==2)
{
delete_name(phead);
}
else if(a==3)
{
delete_age(phead);
}
else if(a==4)
{
delete_gmath(phead);
}
else if(a==5)
{
delete_glang(phead);
}
else if(a==6)
{
delete_gphil(phead);
}
else if(a==7)
{
delete_gsum(phead);
}
else if(a==8)
{
delete_classid(phead);
}*/
else if(a==9)
{
student_main_surface(phead);
}
else
{
student_main_surface(phead); //学生的主目录
}
}
/// @brief 输入学生的cid删除学生的信息界面和打印删除后的所以学生信息
/// @param phead 头节点
void delete_cid(nmenu* phead)
{
system("clear");
printf("===================================================\n");
printf("* 欢迎进入输入学生的cid删除学生的信息 *\n");
printf("===================================================\n");
delete_information(phead);
nmenu* pnew = phead->next;
while(pnew)
{
printf("\n");
printf("学生的cid:%s\n",pnew->data->cid);
printf("学生的姓名:%s\n",pnew->data->name);
printf("学生的年龄:%d\n",pnew->data->age);
printf("学生的数学成绩:%d\n",pnew->data->gmath);
printf("学生的c语言:%d\n",pnew->data->glang);
printf("学生的语文成绩:%d\n",pnew->data->gphil);
printf("学生的总成绩:%d\n",pnew->data->gsum);
printf("学生的班号:%s\n",pnew->data->classid);
printf("\n");
pnew = pnew->next;
}
printf("任意键输入加回车 回到上一个界面!\n");
getchar();
getchar();
student_information_seek(phead);//学生的信息查找
}
/// @brief 找到按cid删除的节点的信息
/// @param phead 头节点
void delete_information(nmenu* phead)
{
nmenu* pnode=dfind_cid(phead);
nmenu *temp = phead;
while(temp->next != pnode)
{
temp = temp->next;
}
temp->next = pnode->next;
free(pnode->data);
free(pnode);
pnode=NULL;
}
/// @brief 按cid查找当前节点
/// @param phead 头节点
/// @return 返回所需节点地址
nmenu* dfind_cid(nmenu* phead)
{
char arr[16]={0};
nmenu* pnode=phead->next;
printf("请输入id:");
scanf("%s",arr);
while(pnode)
{
int i=strcmp(pnode->data->cid,arr);
if(i==0)
{
return pnode;
}
pnode=pnode->next;
}
return NULL;
}
/// @brief 按年龄查找所需的数据节点
/// @param phead 头节点
/// @return 返回查找到的数据节点
nmenu* dfind_age(nmenu* phead)
{
int i=0;
nmenu* pnode=phead->next;
printf("请输入age:");
scanf("%d",&i);
while(pnode)
{
if(i==pnode->data->age)
{
return pnode;
}
pnode=pnode->next;
}
return NULL;
}
/// @brief 学生信息修改界面
/// @param phead 头节点
void modify_student_information(nmenu* phead)
{
system("clear");
int a;
printf("==========================================\n");
printf("* 学生的信息修改界面 *\n");
printf("==========================================\n");
printf("* 1.按学生的cid修改 *\n");
printf("------------------------------------------\n");
printf("* 2.按学生的姓名修改 *\n");
printf("------------------------------------------\n");
printf("* 3.按学生的年龄修改 *\n");
printf("------------------------------------------\n");
printf("* 4.按学生的数学成绩修改 *\n");
printf("------------------------------------------\n");
printf("* 5.按学生的c语言成绩修改 *\n");
printf("------------------------------------------\n");
printf("* 6.按学生的语文成绩修改 *\n");
printf("------------------------------------------\n");
printf("* 7.按学生的班号修改 *\n");
printf("------------------------------------------\n");
printf("* 8.按学生的总分修改 *\n");
printf("------------------------------------------\n");
printf("* 9.退出! *\n");
printf("==========================================\n");
printf("请输入数字来选择功能:");
scanf("%d",&a);
if(a==1)
{
modify_cid(phead);
}
else if(a==3)
{
modify_age(phead);
}
/*else if(a==2)
{
modify_name(phead);
}
else if(a==4)
{
modify_gmath(phead);
}
else if(a==5)
{
modify_glang(phead);
}
else if(a==6)
{
modify_gphil(phead);
}
else if(a==7)
{
modify_gsum(phead);
}
else if(a==8)
{
modify_classid(phead);
}*/
else if(a==9)
{
student_main_surface(phead);
}
else
{
student_main_surface(phead); //学生的主目录
}
}
/// @brief 输入学生的cid修改学生的信息界面
/// @param phead 头节点
void modify_cid(nmenu *phead)
{
system("clear");
printf("===================================================\n");
printf("* 欢迎进入输入学生的cid修改学生的信息 *\n");
printf("===================================================\n");
modify_information(phead);
printf("任意键输入加回车 回到上一个界面!\n");
getchar();
getchar();
modify_student_information(phead);//学生的信息查找
}
/// @brief 打印查找到的节点的数据
/// @param phead 头节点
void modify_information(nmenu* phead)
{
nmenu* pnode=dfind_cid(phead);
printf("请输入你要修改的cid");
scanf("%s",pnode->data->cid);
printf("\n");
printf("学生的cid:%s\n",pnode->data->cid);
printf("学生的姓名:%s\n",pnode->data->name);
printf("学生的年龄:%d\n",pnode->data->age);
printf("学生的数学成绩:%d\n",pnode->data->gmath);
printf("学生的c语言:%d\n",pnode->data->glang);
printf("学生的语文成绩:%d\n",pnode->data->gphil);
printf("学生的总成绩:%d\n",pnode->data->gsum);
printf("学生的班号:%s\n",pnode->data->classid);
}
/// @brief 输入学生的age修改学生的信息界面
/// @param phead 头节点
void modify_age(nmenu *phead)
{
system("clear");
printf("===================================================\n");
printf("* 欢迎进入输入学生的age修改学生的信息 *\n");
printf("===================================================\n");
modify_information_age(phead);
printf("任意键输入加回车 回到上一个界面!\n");
getchar();
getchar();
modify_student_information(phead);//学生的信息查找
}
/// @brief 打印按年龄查找到的节点的数据
/// @param phead 头节点
void modify_information_age(nmenu* phead)
{
nmenu* pnode=dfind_age(phead);
printf("请输入你要修改的age");
scanf("%d",&pnode->data->age);
printf("\n");
printf("学生的cid:%s\n",pnode->data->cid);
printf("学生的姓名:%s\n",pnode->data->name);
printf("学生的年龄:%d\n",pnode->data->age);
printf("学生的数学成绩:%d\n",pnode->data->gmath);
printf("学生的c语言:%d\n",pnode->data->glang);
printf("学生的语文成绩:%d\n",pnode->data->gphil);
printf("学生的总成绩:%d\n",pnode->data->gsum);
printf("学生的班号:%s\n",pnode->data->classid);
}
/// @brief 学生信息排序界面
/// @param phead 头节点
void sort_student_information(nmenu* phead)
{
system("clear");
int a;
printf("==========================================\n");
printf("* 学生的信息排序界面 *\n");
printf("==========================================\n");
printf("* 1.按学生的年龄排序 *\n");
printf("------------------------------------------\n");
printf("* 2.按学生的数学成绩排序 *\n");
printf("------------------------------------------\n");
printf("* 3.按学生的c语言成绩排序 *\n");
printf("------------------------------------------\n");
printf("* 4.按学生的语文成绩排序 *\n");
printf("------------------------------------------\n");
printf("* 5.按学生的总分排序 *\n");
printf("------------------------------------------\n");
printf("* 6.退出! *\n");
printf("==========================================\n");
printf("请输入数字来选择功能:");
scanf("%d",&a);
if(a==1)
{
sortid(phead);
}
/*else if(a==2)
{
sort_gmath(phead);
}
else if(a==3)
{
sort_glang(phead);
}
else if(a==4)
{
sort_gphil(phead);
}
else if(a==5)
{
sort_gsum(phead);
}*/
else if(a==6)
{
student_main_surface(phead);
}
else
{
student_main_surface(phead); //学生的主目录
}
}
/// @brief 查找有多少数据节点
/// @param phead 头节点
/// @param size 节点数
/// @return 返回节点个数
int size_data(nmenu* phead,int size)
{
size=0;
nmenu* pnode=phead->next;
while (pnode)
{
size++;
pnode=pnode->next;
}
return size;
}
/// @brief 按年龄排序函数
/// @param phead 头节点
void sortid(nmenu *phead)//按id排序
{
system("clear");
printf("===================================================\n");
printf("* 欢迎进入输入学生的年龄排序学生的信息 *\n");
printf("===================================================\n");
if (phead == NULL || phead->next == phead || phead->next->next == phead)
{
return;
}
printf("111\n");
stu_t ptemp = {0};
nmenu *p = phead->next;
nmenu *q = p->next;
while (p )
{
q = p->next;
while (q )
{
if (p->data->age > q->data->age)
{
ptemp = *(p->data);
*(p->data) = *(q->data);
*(q->data) = ptemp;
}
q = q->next;
}
p = p->next;
}
nmenu* pnew=phead->next;
while(pnew)
{
printf("\n");
printf("学生的cid:%s\n",pnew->data->cid);
printf("学生的姓名:%s\n",pnew->data->name);
printf("学生的年龄:%d\n",pnew->data->age);
printf("学生的数学成绩:%d\n",pnew->data->gmath);
printf("学生的c语言:%d\n",pnew->data->glang);
printf("学生的语文成绩:%d\n",pnew->data->gphil);
printf("学生的总成绩:%d\n",pnew->data->gsum);
printf("学生的班号:%s\n",pnew->data->classid);
printf("\n");
pnew = pnew->next;
}
printf("任意键输入加回车 回到上一个界面!\n");
getchar();
getchar();
sort_student_information(phead);//学生的信息查找
}
/// @brief 学生密码的设置
/// @param phead 头节点
void password_stu(nmenu* phead)
{
char srr[20]={"654321"};
char arr[20]={0};
printf("请输入你的密码:");
scanf("%s",arr);
int res=strcmp(arr,srr);
if(res==0)
{
stu_student_main_surface(phead);
}
else
{
exit(0);
}
}
/// @brief 学生系统主界面
/// @param phead 头节点
void stu_student_main_surface(nmenu* phead)
{
system("clear");
printf("\n");
printf("********************************\n");
printf("| |\n");
printf("| 学生系统主界面 |\n");
printf("===============================\n");
printf("* 0.返回 *\n");
printf("| 1.查找本人学生信息 |\n");
printf("| 2.修改本人学生的信息 |\n");
printf("| 3.退出系统 |\n");
printf("| |\n");
printf("********************************\n");
printf("请输入一个数字选择功能:");
int a;
scanf("%d",&a);
printf("\n");
if(a>3||a<0)
{
printf("输入错误,不再要求之内!\n");
printf("即将再次进入主界面!\n");
sleep(1);
student_main_surface(phead);
}
else
{
if(a==0)
{
topxt(phead);
}
else if(a==1)
{
look_student_information(phead);
}
else if(a==2)
{
age_modify_student_information(phead);
}
else if(a==3)
{
printf("感谢您的使用,欢迎再次使用!再见!\n");
sleep(1);
return;
}
}
}
/// @brief 请输入id查找的信息
/// @param phead 头节点
void look_student_information(nmenu* phead)
{
system("clear");
printf("===================================================\n");
printf("* 欢迎进入请输入id查找的信息 *\n");
printf("===================================================\n");
input_student_input(phead);
printf("任意键输入加回车 回到上一个界面!\n");
getchar();
getchar();
stu_student_main_surface(phead);
}
/// @brief 修改需要修改的年龄信息
/// @param phead 头节点
void age_modify_student_information(nmenu* phead)
{
system("clear");
printf("===================================================\n");
printf("* 欢迎进入输入学生的age修改学生的信息 *\n");
printf("===================================================\n");
modify_information_age(phead);
printf("任意键输入加回车 回到上一个界面!\n");
getchar();
getchar();
stu_student_main_surface(phead);
}
void topxt(nmenu* phead)
{
int i=0;
system("clear");
printf("============================\n");
printf("* 1.管理员系统 *\n");
printf("===========================\n");
printf("* 2.学生系统 *\n");
printf("===========================\n");
printf("请输入1进入学生管理系统或者输入2进入管理员系统\n");
scanf("%d",&i);
if(i==1)
{
password(phead);
}
else if(i==2)
{
password_stu(phead);
}
}
/*nmenu * readstudent()
{
FILE* pf=fopen("sdjbhh.txt","rb+");
nmenu* read_head =(nmenu*)malloc(sizeof(nmenu));
nmenu* newnode =(nmenu*)malloc(sizeof(nmenu));
read_head->next=NULL;
if(pf)
{
fseek(pf,0,0);
while (fread(newnode,sizeof(nmenu),1,pf))
{
nmenu* read=(nmenu*)malloc(sizeof(nmenu));
strcpy(read->data->cid,newnode->data->cid);
strcpy(read->data->name,newnode->data->name);
read->data->age=newnode->data->age;
strcpy(read->data->classid,newnode->data->classid);
read->data->glang=newnode->data->glang;
read->data->gmath=newnode->data->gmath;
read->data->gphil=newnode->data->gphil;
read->data->gsum=newnode->data->gsum;
read->next=read_head->next;
read_head->next=read;
}
fclose(pf);
}
free(newnode);
return read_head;
}
void savestudata(nmenu* phead)
{
FILE* pf=fopen("sdjbhh.txt","w+");
if(pf)
{
nmenu* pmove=phead->next;
while(pmove)
{
fwrite(pmove,sizeof(nmenu),1,pf);
pmove=pmove->next;
}
fclose(pf);
}
}*/
主函数部分:
这部分可以自行按照自己要求进行。
#include"nmenu.h"
int main()
{
nmenu* phead = creat_head();
topxt(phead);
return 0;
}