/* * C语言学生管理系统(动态链表版)
* 界面比较混乱,因为只是实现了初步功能,同时学生可以修改自己的成绩,这一点不是很好,后面会改进,还有一些功能需要读者自己去发现和修改,谢谢! * 作者:老猫历险记 * 时间:2017年4月6号 * 功能:增添新键数据 * 平台:linux (Ubuntu) */ 创建main.h 内容为下 #ifndef _MAIN_H_ #define _MATH_H_ #include"stu.h" #include"teacher.h" #include"ClassTutor.h" void edit();/*管理员操作界面*/ void interface();/*总登录界面*/ void login_manger();/*管理员登录界面*/ #endif
创建stu.h文件,由于老师、班主任的头文件可以直接用学生的模板来套,所以我详细的讲解stu.h文件的敲写,需要和stu.c函数一起看。
1 #ifndef _STU_H_ 2 #define _STU_H_ 3 #include<stdio.h> 4 #include<string.h> 5 #include<stdlib.h> 6 #define NONE "\033[m" /*宏定义声明颜色*/ 7 #define RED "\033[0;32;31m" 8 #define LIGHT_RED "\033[1;31m" 9 #define GREEN "\033[0;32;32m" 10 #define LIGHT_GREEN "\033[1;32m" 11 #define BLUE "\033[0;32;34m" 12 #define LIGHT_BLUE "\033[1;34m" 13 #define DARY_GRAY "\033[1;30m" 14 #define CYAN "\033[0;36m" 15 #define LIGHT_CYAN "\033[1;36m" 16 #define PURPLE "\033[0;35m" 17 #define LIGHT_PURPLE "\033[1;35m" 18 #define BROWN "\033[0;33m" 19 #define YELLOW "\033[1;33m" 20 #define LIGHT_GRAY "\033[0;37m" 21 #define WHITE "\033[1;37m"/*宏定义声明颜色,一共16种颜色*/ 22 #define LL sizeof(NODE) /*宏定义,说明sizeof(NODE)用LL替换*/ 23typedef struct student /*结构体数据,包含学生内容的所有数据*/ 24 { 25 char name[32]; /*定义字符串类型数据*/ 26 char pawd[32]; /*定义字符串类型数据*/ 27 char id[32]; /*定义字符串类型数据*/ 28 int clss; /*定义整型数据*/ 29 char obje[32]; /*定义字符串类型数据*/ 30 float cpro; /*定义单精度类型数据*/ 31 float chin; /*定义单精度类型数据*/ 32 float math; /*定义单精度类型数据*/ 33 float add; /*定义单精度类型数据*/ 34 }S;//学生结构体 35 36 typedef struct node 37 { 38 S student;/*内嵌S型结构体数据变量student*/ 39 struct node* next;/*指向自身结构体的指针*/ 40 }NODE,*PH;//学生初始链表构建有内容头结点,此处定义了一种node结构体的NODE类型,NODE现在是类型名,后面数据读取分配大小时需要用到NODE。 41 42 typedef struct head 43 { 44 int len_s; 45 struct node *pfhead; 46 }Head,*PF;//学生空头结点,说明的是后面利用PF,先创建一个空指针节点,指针指向空,节点存取数据len_s. 47 48 void login_student();/*学生登录界面,直接登录没有参数和返回值*/ 49 void edit_student();/*登录嵌入函数,编辑学生的信息,没有传参和返回值*/ 50 PF creat_student();/*创建学生存储链表,由于需要返回空节点指针(也是链表的头),所以需要定义为PF类型*/ 51 PH student_data();/*创建学生信息,由于创建的节点是保存学生的信息的,需要定义为PH类型*/ 52 PF insert_student(PF phead);/*插入学生信息,利用头结点的移动和student_data的返回值来添加,需要返回一个头结点,所以定义为PF型*/ 53 PF modify_student_list(PF phead);/*修改学生信息,利用头结点的传参遍历来获取学生数据,比较进行修改数据,这边需要进行传参和返回值,类型为PF*/ 54 void search_student(PF phead);/*搜索学生信息,利用头结点的传参遍历来搜索学生信息,由于不需要改变学生信息,所以不需要返回值*/ 55 PF read_student();/*读取学生信息,利用创建空节点的函数来不断将文本中的数据读取添加到所创建的新链表中,同时返回头节点,所以函数定义需要使用PF类型*/ 56 void prin_student(PF phead);/*打印学生信息,打印学生信息使用到传参,在函数内部创建一个PH类型数据节点==传参节点指向下一个的结构体内容*/ 57 void save_student(PF phead);/*保存学生信息,利用头结点的传参和新建PH类型的数据节点来遍历存取数据,所以需要传参,是否需要返回值,由于对链表无操作,所以不需要返回值*/ 58 PF delete_student(PF phead);/*删除学生信息,由于需要使用到头结点进行传参,同时返回修改后的头结点,所以需要使用到PF来定义。*/ 59 #endif
创建teacher.h文件
1 #ifndef _TEACHER_H_ 2 #define _TEACHER_H_ 3 #define DD sizeof(Date) 4 #include"stu.h" 5 typedef struct teacher 6 { 7 char name[32]; 8 char pawd[32]; 9 char clss[32]; 10 char id[32]; 11 }T;//老师结构体 12 13 typedef struct date 14 { 15 T teacher; 16 struct date* next; 17 }Date,*PT;//老师初始链表构建有内容头结点 18 19 typedef struct back 20 { 21 int len_t; 22 struct date *pbhead; 23 }Back,*PB;//老师空头结点 24 25 void login_teacher();/*老师登录界面*/ 26 PB creat_teacher();/*创建老师存储链表*/ 27 PT teacher_data();/*创建老师信息*/ 28 void get_teacher_data();/*老师对学生和自己的操作*/ 29 PB insert_teacher(PB phead);/*插入老师信息*/ 30 void search_teacher(PB phead);/*搜索老师信息*/ 31 void prin_teacher(PB phead);/*打印老师信息*/ 32 PB modify_teacher_list(PB phead);/*修改老师信息*/ 33 PB delete_teacher(PB phead);/*删除老师信息*/ 34 PB read_teacher();/*打开老师存储文本信息*/ 35 void save_teacher(PB phead);/*保存老师信息*/ 36 37 #endif
创建ClassTutor.h文件
1 #ifndef _CLASS_TUTOR_H_ 2 #define _CLASS_TUTOR_H_ 3 #include"stu.h" 4 #include"teacher.h" 5 #define PsP sizeof(P_class_Tutor) 6 typedef struct Class_Tutor 7 { 8 char ID[32]; 9 char name[32]; 10 char pawd[32]; 11 }C; 12 13 typedef struct class_Tutor 14 { 15 C Class_Tutor; 16 struct class_Tutor *next; 17 }P_class_Tutor,*PC; 18 typedef struct pm 19 { 20 int len_c; 21 struct class_Tutor *pchead; 22 }lp,*PM;//老师空头结点 23 24 void edit_Class_Tutor();/*班主任编辑内容*/ 25 void login_Class_Tutor();/*班主任登录界面*/ 26 PM creat_Class_Tutor();/*创建班主任存储链表*/ 27 PC Class_Tutor_data();/*创建班主任信息*/ 28 PM insert_Class_Tutor(PM phead);/*插入班主任信息*/ 29 void prin_Class_Tutor(PM phead);/*打印班主任信息*/ 30 PM modify_Class_Tutor_list(PM phead);/*修改班主任信息*/ 31 void search_Class_Tutor(PM phead);/*搜索班主任信息*/ 32 PM delete_Class_Tutor(PM phead);/*删除班主任信息*/ 33 PM read_Class_Tutor();/*打开班主任存储文本信息*/ 34 void save_Class_Tutor(PM phead);/*保存班主任信息*/ 35 #endif
创建stu.c文件
1 #include"stu.h" 2 /******************************************************************************************* 3 创建空节点指针,用来指向内容首节点。 4 创建头指针用来指向链表第一个元素 phead->pfhead=NULL !!! 5 *******************************************************************************************/ 6 7 PF creat_student() 8 { 9 PF phead=NULL; 10 phead=(PF)malloc(sizeof(Head)); 11 phead->pfhead=NULL; 12 phead->len_s=0; 13 return phead; 14 } 15 16 /******************************************************************************************* 17 18 录信息函数 p=(PH)malloc(LL) 19 *******************************************************************************************/ 20 21 PH student_data() 22 { 23 PH p; 24 p=(PH)malloc(LL); 25 printf("请输入以下信息\n\n"); 26 printf("NAME:"); 27 scanf("%s",p->student.name); 28 getchar(); 29 printf("PAWD:"); 30 scanf("%s",p->student.pawd); 31 getchar(); 32 printf("ID:"); 33 scanf("%s",p->student.id); 34 getchar(); 35 printf("CLSS:"); 36 scanf("%d",&p->student.clss); 37 getchar(); 38 printf("OBJE:"); 39 scanf("%s",p->student.obje); 40 getchar(); 41 printf("CPRO:"); 42 scanf("%f",&p->student.cpro); 43 getchar(); 44 printf("CHIN:"); 45 scanf("%f",&p->student.chin); 46 getchar(); 47 printf("MATH:"); 48 scanf("%f",&p->student.math); 49 getchar(); 50 printf("ADD:"); 51 scanf("%f",&p->student.add); 52 getchar(); 53 54 55 return p; 56 } 57 58 59 60 61 62 /******************************************************************************************* 63 64 创建链表 p->next=phead->pfhead; phead->pfhead=p; 65 *******************************************************************************************/ 66 PF insert_student(PF phead) 67 { 68 PH p=NULL; 69 int i=0,k=0; 70 while(1) 71 { 72 if(k!=0) 73 { 74 printf("if want to add ,input 1\texit:input 0\n"); 75 printf("your choose:"); 76 scanf("%d",&i); 77 getchar(); 78 if(i==0) 79 { 80 break; 81 } 82 } 83 p=student_data(); 84 p->next=phead->pfhead; 85 phead->pfhead=p; 86 k++; 87 phead->len_s++; 88 } 89 90 return phead; 91 } 92 93 94 /******************************************************************************************* 95 96 输出链表 97 *******************************************************************************************/ 98 void prin_student(PF phead) 99 { 100 PH p=phead->pfhead; 101 printf("学生信息如下:\n"); 102 printf("姓名\t密码\t昵称\t班级\t专业\tc语言\t语文\t数学\t总分\n"); 103 while(p!=NULL) 104 { 105 printf("%-8s%-8s%-8s%-8d%-8s%-8.2f%-8.2f%-8.2f%-8.2f\n",p->student.name,p->student.pawd,p->student.id,p->student.clss,p->student.obje,p->student.cpro,p->student.chin,p->student.math,p->student.cpro+p->student.chin+p->student.math); 106 p=p->next; 107 } 108 //printf("any exit"); 109 //getchar(); 110 } 111 112 113 /******************************************************************************************* 114 115 查找链表中学生的信息 116 *******************************************************************************************/ 117 118 void search_student(PF phead) 119 { 120 PH p=phead->pfhead; 121 char id[32]; 122 printf("please input id:"); 123 scanf("%s",id); 124 getchar(); 125 while(p!=NULL) 126 { 127 if(strcmp(p->student.id,id)==0) 128 { 129 printf("%-8s%-8s%-8s%-8d%-8s%-8.2f%-8.2f%-8.2f%-8.2f\n",p->student.name,p->student.pawd,p->student.id,p->student.clss,p->student.obje,p->student.cpro,p->student.chin,p->student.math,p->student.add); 130 return ; 131 } 132 p=p->next; 133 } 134 printf("no this boy\n"); 135 printf("input any to exit:"); 136 getchar(); 137 return ; 138 } 139 /******************************************************************************************************************* 140 141 删除链表中的信息 p2=p1; p1=p1->next; 142 *******************************************************************************************************************/ 143 PF delete_student(PF phead) 144 { 145 PH p1=phead->pfhead; 146 PH p2; 147 char name[32]; 148 printf("\ninput NAME:"); 149 scanf("%s",name); 150 getchar(); 151 while(p1!=NULL&&strcmp(name,p1->student.name)) 152 { 153 p2=p1; 154 p1=p1->next; 155 } 156 if(strcmp(p1->student.name,name)==0) 157 { 158 printf("是否确定删除!"); 159 printf("确定删除请输入:1 取消:0\n"); 160 int i; 161 scanf("%d",&i); 162 if(i==1) 163 { 164 if(p1==phead->pfhead) 165 { 166 phead->pfhead=p1->next; 167 } 168 else 169 { 170 p2->next=p1->next; 171 } 172 phead->len_s--; 173 } 174 if(i==0)return phead; 175 } 176 return phead; 177 } 178 /******************************************** 179 修改学生信息 180 181 ********************************************/ 182 183 PF modify_student_list(PF phead) 184 { 185 PH temp; 186 char ch[32]; 187 int a; 188 printf("输入需要修改的ID:"); 189 scanf("%s",ch); 190 getchar(); 191 temp=(PH)malloc(sizeof(NODE)); 192 temp=phead->pfhead; 193 while(temp!=NULL) 194 { 195 if(strcmp(temp->student.id,ch)==0) 196 { 197 break; 198 } 199 temp=temp->next; 200 } 201 if(temp==NULL) 202 { 203 printf("无此id\n"); 204 getchar(); 205 printf("按任意键退出"); 206 return phead; 207 } 208 else 209 { 210 printf("开始修改\n"); 211 while(1) 212 { 213 printf("1:名字 2:密码 3:id 4:班级 5:科目 6:c语言 7:语文 8:数学 9:离开\n"); 214 scanf("%d",&a); 215 getchar(); 216 switch(a) 217 { 218 case 1: 219 printf("名字:"); 220 scanf("%s",temp->student.name); 221 getchar(); 222 printf("修改成功\n"); 223 break; 224 case 2: 225 printf("
全部评论
专题导读
-
10-27 六六分期app的软件客服如何联系?(六六分期
-
11-06 亲亲特价:怎么删除回收站图标
-
11-06 济南大学虚拟社区:鲁大师节能降温的具体办
-
11-06 xlueops.exe:无线网络安装向导
-
11-06 女斗合众国:win7系统cf与主机连接不稳定怎
-
11-06 ipz-185:win7系统vcf文件怎么打开
-
11-06 傻哥蹦迪:win10系统s4怎么打开usb调试
-
11-06 八神浩树gtaste:回收站清空了怎么恢复
-
11-06 校园至尊魔王小说:win7系统浏览网页时字体
-
11-06 女斗合众国:win10系统访问共享文件夹提示请
-
11-06 雨酷仙境:设置win7系统转移临时文件夹腾出
-
11-06 阿穆纳伊之杖:win7系统开始菜单在右边还原
-
11-06 甘尔葛分析师:计谋网站seo关键词暴涨有什
-
11-06 蔡贵霖: 计谋网站seo关键词暴涨有什么秘密
-
11-06 博益网首页:ao3网页版进入不了解决方法
-
11-06 漏斗子专栏: 网站数据分析小白易懂精华篇
-
11-06 颾狐蝶蜋:系统资源不足无法完成请求的服务
-
11-06 国光中学校歌:提交网站到alexa查询详细步骤
-
11-06 西安有情天:静态网页和动态网页的区别
-
11-06 红木雅尚斋:外部链接构造对网站的好处
-
11-06 前官礼遇:防止域名劫持–增强域安全性的10
-
11-06 密传二转答案: 中文分词算法有哪些
-
11-06 金泉家园邮编:百度快照劫持的表现及应对方
热门推荐
热门话题
-
2022-11-06
剪的笔顺,诠释剪的笔画,认识剪的部首
-
六六分期app的软件客服如何联系?(六六分期
2023-10-27
-
florent37/ViewAnimator: A fluent Android
2022-08-15
-
florent37/Shrine-MaterialDesign2: implem
2022-08-17
-
CVE-2020-36276
2022-09-23
-
SimpleSoftwareIO/simple-sms: Send and re
2022-08-13
阅读排行榜
请发表评论