600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 第一篇博客——C语言实现简单的学生成绩管理系统

第一篇博客——C语言实现简单的学生成绩管理系统

时间:2018-10-05 13:11:54

相关推荐

第一篇博客——C语言实现简单的学生成绩管理系统

C语言简单实现学生成绩管理系统

一、前言

首先,要写一个管理系统必须要先搭出一个框架来,即明确自己要实现哪些功能,将每个功能都写陈一个函数,然后再去编写实现各个功能的函数,最后再思考各个函数之间的相互调用。如果没有先搭好框架,而是直接一上手就去写代码的话,写着写着就会有种无从下手的感觉,就像你要做一道编程题目一样,首先要做的肯定是去读题目,看题目想要让我们干什么,然后才会去写代码。

其次,最好是实现一个功能就测试一个,因为这样比较方便调试,出现bug的时候自己先思考,然后再去查找对应的知识点,一定要自己多思考,这样才会使自己的理解和记忆更加深刻

最后,在写管理系统的时候会出现很多bug,在解决完之后会有很大收获。

二、涉及内容及要求

C语言的选择,循环,数组,字符串,链表,文件的熟练掌握链表的增删改查及链表排序文件录入链表及把链表信息存入文件

三、小技巧

多文件存放信息,即将学生成绩信息,学生账号信息,教师账号信息存入不同文件中,这样方便内容的读取将链表内容导入文件时一行存放一个人的信息,方便读取在进入系统时就把学生成绩信息,学生账号信息,教师账号信息从文件录入链表修改密码时必须验证原密码,在修改完密码后立即存入文件在系统退出时将学生成绩信息导入文件,不用每次修改后就导入在输入密码时在屏幕上用’*’来代替用户输入的密码

四、正文

界面

我的管理系统分了三个端口:教师端,学生端,管理员端首先,这是登录界面

教师端功能界面

学生端界面

学生端功能界面

管理员功能界面

详情

每个端口进行登录时都会进行账号和密码验证,若账号不存在则自动退出系统,账号正确密码错误时会有三次机会,若正确则进入,若错误则输出错误信息,并提示还有几次机会,三次错误系统会自动退出:

五、代码块

头文件

#define MAX 20#ifndef HEAD_H_INCLUDED#define HEAD_H_INCLUDED#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>#include <unistd.h>#include <errno.h>typedef struct student {char xuehao[9] ;char name[MAX] ;int total ;char Advanced[4] ;char C_language_programming[4] ;char English[4] ;float average ;}Item ;typedef struct node1 {Item student ;struct node1 * next ;}Node_student;typedef Node_student * Linklist_student ;typedef struct account_password {char account [9] ;char password [MAX] ;} AAP ;typedef struct node2 {AAP account_password ;struct node2 * next ;} Node_aap ;typedef Node_aap * Linklist_aap ;Linklist_student chuangjian () ;//学生链表的创建void entering1 (Linklist_student) ; //学生信息导出Linklist_student export1 () ; //学生信息导入void entering2(Linklist_aap, int) ; //账号信息导出Linklist_aap export2(int) ; //账号信息导入void add1(Linklist_student) ; //增加学生信息void del1(Linklist_student) ; //删除学生信息void change1(Linklist_student) ;//修改学生信息void add2(Linklist_aap) ; //增加账号信息void del2(Linklist_aap) ; //删除账号信息int change2(Linklist_aap, const char *) ; //密码修改void find2(Linklist_aap) ; //查找账号信息void password_change() ; //管理员密码修改void find1(Linklist_student) ; //查找学生信息void Performance_analysis(Linklist_student) ; //成绩分析int Print2(Linklist_aap) ; //打印账号信息void sort () ; //对学生链表进行排序void Print1() ; //打印学生信息void Print3() ; //打印某个账号信息void show() ;//系统界面void manager_interface() ; //管理员登录界面void manager_login() ;//管理员登录(密码验证)void manager_power() ;//管理员权限void student_interface() ; //学生登录界面void register1 () ; //用户注册void login (int) ;//用户登录(账号密码验证)void student_power (const char *) ; //学生用户权限界面void teacher_register () ; //教师用户注册void teacher_power() ;//教师用户权限void password_input(char * p) ; //密码输入void student_handle() ;//学生账号信息管理void teacher_handle() ;//教师账号信息管理char * s_gets(char * p, int n) ;//获取字符串

函数定义

#include "head.h"void password_input (char * p) {//密码输入int i = 0 ;while (i<19) {char ch ;ch = getch() ;if (ch == '\n' || ch == '\r') {p[i] = '\0' ;break ;}else if (ch == '\b'){if (i>0) {printf("\b \b") ;p[--i] = '\0' ;}}else {p[i++] = ch ;putchar('*') ;}}fflush(stdin) ;p[19] = '\0' ;}void register1 () {//账号注册system("cls") ;AAP * aap1 = (AAP *) malloc (sizeof(AAP)) ;AAP * aap2 = (AAP *) malloc (sizeof(AAP)) ;FILE * fp = fopen("student_cAp.txt", "at+") ;if (fp==NULL) {printf("\n\t打开文件失败\n") ;puts("\n\t请键入任意键退出!") ;getch() ;exit(1) ;}printf("\n\n\n\t请输入用户名(8位学号):") ;scanf("%s", aap1->account) ;fflush(stdin) ;while (!feof(fp)) {fscanf(fp, "%s %s\n", aap2->account, aap2->password) ;if (strcmp(aap1->account, aap2->account) == 0) {puts("\t该用户已存在!请重新注册或登录!") ;printf("\t请键入任意键返回注册界面!") ;getch() ;fclose(fp) ;free(aap1) ;free(aap2) ;student_interface() ;}}printf("\n\t密码:\n\t") ;password_input (aap1->password) ;printf("\n\t请在输入一遍进行确认:\n\t") ;password_input(aap2->password) ;if (strcmp(aap1->password, aap2->password)) {puts("\n\t两次输入不一致!请重新进行注册!") ;student_interface() ;}fprintf(fp, "%s %s\n", aap1->account, aap1->password) ;fclose(fp) ;free(aap1) ;free(aap2) ;student_interface() ;}void login (int n) {//登录验证system("cls") ;AAP * aap1 = (AAP *) malloc(sizeof(AAP)) ;AAP * aap2 = (AAP *) malloc(sizeof(AAP)) ;FILE * fp ;if (n==2) {fp = fopen("teacher_cAp.txt", "rt") ;if (fp==NULL) {printf("\n\t打开文件失败\n") ;puts("\n\n\n\t请键入任意键退出!") ;getch() ;exit(1) ;}printf("\n\t账号:") ;}else {fp = fopen("student_cAp.txt", "rt") ;if (fp==NULL) {printf("\n\t打开文件失败\n") ;puts("\n\n\n\t请键入任意键退出!") ;getch() ;exit(1) ;}printf("\n\n\n\t账号(8位学号):") ;}scanf("%s", aap1->account) ;fflush(stdin) ;while (!feof(fp)) {fscanf(fp, "%s %s\n", aap2->account, aap2->password) ;if (strcmp(aap1->account, aap2->account)==0) {printf("\n\t密码:") ;for (int i=0; i<3; i++) {password_input (aap1->password) ;if (strcmp(aap1->password, aap2->password)==0) {puts ("登录成功!") ;if (n==1)student_power(aap1->account) ;elseteacher_power(aap1->account) ;}elseprintf("\n\t密码错误!请重新输入(您还有%d次机会):\n\t", 2-i) ;}printf("\t您已经输错三次,系统将强制退出!\n");exit(1) ;}}fclose (fp) ;printf ("\t该用户不存在!请键入任意字符退出\n") ;getch () ;exit (1) ;}void student_interface () {//学生界面system ("cls") ;printf ("\n\n\n\n\n\n\t\t\t\t\t 欢迎进入学生系统\n") ;printf ("\t\t\t\t\t *******************\n") ;printf ("\t\t\t\t\t 1.注册 \n\t\t\t\t\t 2.登录\n") ;printf ("\t\t\t\t\t 3.返回上一层\n\t\t\t\t\t 0.退出\n") ;printf ("\t\t\t\t\t *******************\n") ;printf ("\t\t\t\t\t 请选择你要进行的操作:\n\t\t\t\t\t ") ;int x ;fflush (stdin) ;do {scanf ("%d", &x) ;fflush (stdin) ;switch (x) {case 1 :register1 (1) ;break ;case 2 :login (1) ;break ;case 3 :show () ;break ;case 0 :entering1(head) ;entering2(aap_s, 1) ;entering2(aap_t, 2) ;printf ("\n\t\t\t\t\t 您选择了退出!") ;sleep (1) ;printf ("\n\t\t\t\t\t 正在退出...") ;sleep (1) ;printf ("\n\t\t\t\t\t 已退出\n") ;exit(0) ;default :printf ("\t输入有误, 请重新输入:\n\t") ;printf("请键入任意键重新进行选择!") ;getch() ;}student_interface() ;}while (x != 0) ;}void student_power(const char * p) {//学生功能system("cls") ;puts("\n\n\n\n\n\n\t\t\t\t\t请选择你要进行的功能:") ;puts("\t\t\t\t\t****************************") ;puts("\t\t\t\t\t 1.查询个人成绩") ;puts("\t\t\t\t\t 2.查询全班成绩") ;puts("\t\t\t\t\t 3.成绩分析") ;puts("\t\t\t\t\t 4.修改密码") ;puts("\t\t\t\t\t 5.返回上一层") ;puts("\t\t\t\t\t 0.退出") ;puts("\t\t\t\t\t****************************") ;printf("\t\t\t\t\t") ;int x ;do {Linklist_student q = head->next ;scanf("%d", &x) ;fflush(stdin) ;if (x == 1 || x == 2) {system("cls") ;sort() ;}int count = 1 ;switch (x) {case 1 :while (q && strcmp(p, q->student.xuehao) != 0) {count ++ ;q = q->next ;}if (q) {printf("\n\n\n\t排名\t\t\t学号\t\t\t姓名\t\t高数\t\tc语言\t\t大英\t\t总分\t\t平均分\n") ;printf("\t%d\t\t\t%s\t\t%s\t\t%d\t\t%d\t\t%d\t\t%d\t\t%.1f\n", count, q->student.xuehao, q->student.name,atoi(q->student.Advanced), atoi(q->student.C_language_programming), atoi(q->student.English), q->student.total,q->student.average) ;}else {puts("\t\t\t\t\t\t 抱歉, 找不到该学生!") ;puts("\t\t\t\t\t\t 请键入任意键返回上一层!") ;getch() ;student_power(p) ;}printf("\t请键入任意键返回上一层\n") ;getch() ;break ;case 2 :Print1() ;break ;case 3 :Performance_analysis(head) ;break ;case 4 :if (change2(aap_s, p)) {entering2(aap_s, 1) ;student_interface() ;}break ;case 5 :student_interface() ;break ;case 0 :entering1(head) ;puts("\t\t\t\t\t您选择了退出!") ;sleep(1) ;puts("\t\t\t\t\t正在退出...") ;sleep(1) ;puts("\t\t\t\t\t已退出\n") ;exit (0) ;default :puts("\t\t\t\t\t输入错误, 请重新选择:") ;printf("\t\t\t\t\t请键入任意键重新进行选择:") ;getch() ;}student_power(p) ;}while (x != 0) ;}void entering1(Linklist_student phead) {//学生信息导出Linklist_student p = phead->next ;FILE * fp = fopen("student_message.txt", "w+") ;if (fp != NULL) {while (p) {fprintf(fp, "%s %s %s %s %s %d %.1f\n", p->student.name, p->student.xuehao, p->student.Advanced,p->student.C_language_programming, p->student.English, p->student.total, p->student.average) ;p = p->next ;}}fclose(fp) ;}Linklist_student export1 () {//学生信息导入changdu = 0 ;Linklist_student phead, p, q ;phead = (Linklist_student) malloc (sizeof(Node_student)) ;phead->next = NULL ;p = phead ;FILE * fp = fopen("student_message.txt", "rt") ;if (fgetc(fp)==EOF);else {rewind(fp) ;while (!feof(fp)) {q = (Linklist_student) malloc (sizeof(Node_student)) ;fscanf(fp, "%s %s %s %s %s %d %f\n", q->student.name, q->student.xuehao, q->student.Advanced,q->student.C_language_programming, q->student.English, &q->student.total, &q->student.average) ;changdu ++ ;p->next = q ;p = q ;}q->next = NULL ;}fclose(fp) ;return phead ;}void entering2(Linklist_aap phead, int n) {//账号信息导出Linklist_aap p = phead->next ;FILE * fp ;if (n == 1)fp = fopen("student_cAp.txt", "w+") ;elsefp = fopen("teacher_cAp.txt", "w+") ;while (p) {fprintf(fp, "%s %s\n", p->account_password.account, p->account_password.password) ;p = p->next ;}fclose(fp) ;}Linklist_aap export2 (int n) {//账号信息导入Linklist_aap phead, p, q ;phead = (Linklist_aap) malloc (sizeof(Node_aap)) ;phead->next = NULL ;p = phead ;FILE * fp ;if (n == 1)fp = fopen("student_cAp.txt", "rt") ;elsefp = fopen("teacher_cAp.txt", "rt") ;if (fgetc(fp)==EOF);else {rewind(fp) ;while (!feof(fp)) {q = (Linklist_aap) malloc (sizeof(Node_aap)) ;fscanf(fp, "%s %s\n", q->account_password.account, q->account_password.password) ;p->next = q ;p = q ;}q->next = NULL ;}fclose(fp) ;return phead ;}Linklist_student chuangjian() {//学生信息链表的创建system("cls") ;Linklist_student phead, pnew, pend ;phead = (Linklist_student) malloc(sizeof(Node_student)) ;pend = phead ;phead->next = NULL ;char xuehao[9] ;printf("\n\n\n\t请输入学生学号(8位)[输入非负数结束录入]:") ;changdu = 0 ;while (s_gets(xuehao, 9) && atoi(xuehao)>0) {changdu ++ ;pnew = (Linklist_student) malloc(sizeof(Node_student)) ;pnew->next = NULL ;pend->next = pnew ;strncpy(pnew->student.xuehao, xuehao, 9) ;printf("\n\t请输入该生姓名:") ;s_gets(pnew->student.name, MAX) ;printf("\n\t请输入该生高数成绩:") ;s_gets(pnew->student.Advanced, 4) ;printf("\n\t请输入该生c语言成绩:") ;s_gets(pnew->student.C_language_programming, 4) ;printf("\n\t请输入该生大英成绩:") ;s_gets(pnew->student.English, 4) ;printf("\n\t请输入下一个学生学号(8位)[输入非负数结束录入]:") ;pnew->student.total = atoi(pnew->student.Advanced) + atoi(pnew->student.C_language_programming) + atoi(pnew->student.English) ;pnew->student.average = pnew->student.total / 3.0 ;pend = pnew ;}return phead ;}void add1 (Linklist_student phead) {//添加学生信息system("cls") ;Linklist_student p = phead, pnew ;char xuehao[9] ;printf("\n\n\n\t请输入要添加的学生学号:") ;s_gets(xuehao, 9) ;while (p->next)p = p->next ;pnew = (Linklist_student) malloc (sizeof(Node_student)) ;if (pnew == NULL)puts("\t添加失败!") ;else {strcpy(pnew->student.xuehao, xuehao) ;printf("\n\t请输入该生姓名:") ;s_gets(pnew->student.name, MAX) ;printf("\n\t请输入该生高数成绩:") ;s_gets(pnew->student.Advanced, 4) ;printf("\n\t请输入该生c语言成绩:") ;s_gets(pnew->student.C_language_programming, 4) ;printf("\n\t请输入该生大英成绩:") ;s_gets(pnew->student.English, 4) ;pnew->student.total = atoi(pnew->student.Advanced) + atoi(pnew->student.C_language_programming) + atoi(pnew->student.English) ;pnew->student.average = pnew->student.total / 3.0 ;p->next = pnew ;pnew->next = NULL ;}printf("\n\t请键入任意字符退出\n") ;getch() ;}void del1 (Linklist_student phead) {//删除学生信息system("cls") ;Linklist_student q = phead->next, p = phead->next ;char xuehao[9] ;printf("\n\n\n\t请输入要删除的学号:") ;s_gets(xuehao, 10) ;while (q && strcmp(q->student.xuehao, xuehao) != 0) {p = q ;q = q->next ;}if (q == NULL)puts("\t输入错误, 未找到该生!") ;else {if (q == phead->next)phead->next = q->next ;elsep->next = q->next ;puts("\t已删除!") ;free(q) ;}printf("\t请键入任意字符退出\n") ;getch() ;}void change1 (Linklist_student phead) {//修改学生信息system("cls") ;Linklist_student p = phead->next ;char xuehao[9] ;printf("\n\n\n\t请输入要修改的学生学号:") ;s_gets(xuehao, 9) ;while (p && strcmp(p->student.xuehao, xuehao) != 0)p = p->next ;if (p == NULL)puts("\t输入错误, 为找到该生!") ;else {printf("\n\t\t\t1.姓名 \t\t\t2.高数成绩") ;printf("\n\t\t\t3.c语言成绩\t\t\t4.大英成绩\n") ;printf("\t\t\t5.学号\n") ;printf("\n\t请输入要修改的内容:") ;int x ;scanf("%d", &x) ;fflush(stdin) ;switch (x) {case 1 :printf("\n\t请输入修改后的学生姓名:") ;s_gets (p->student.name, MAX) ;break ;case 2 :printf("\n\t请输入修改后的高数成绩:") ;s_gets(p->student.Advanced, 4) ;break ;case 3 :printf("\n\t请输入修改后的c语言成绩:") ;s_gets(p->student.C_language_programming, 4) ;break ;case 4 :printf("\n\t请输入修改后的大英成绩:") ;s_gets(p->student.English, 4) ;break ;case 5 :printf("\n\t请输入修改后的学号:") ;s_gets(p->student.xuehao, 9) ;break ;}p->student.total = atoi(p->student.Advanced) + atoi(p->student.C_language_programming) + atoi(p->student.English) ;p->student.average = p->student.total / 3.0 ;}printf("\t请键入任意键退出\n") ;getch() ;}void find1 (const Linklist_student phead) {//查找学生信息system("cls") ;Linklist_student p = phead->next ;char xuehao[9] ;printf("\n\n\n\t请输入要查找的学生学号:") ; ;s_gets(xuehao, 9) ;sort() ;int count = 1 ;while (p && strcmp(xuehao, p->student.xuehao) != 0) {count ++ ;p = p->next ;}if (p == NULL)puts("\n\t输入错误, 未找到该生!") ;else {printf("\n\t排名\t\t\t学号\t\t\t姓名\t\t高数\t\tc语言\t\t大英\t\t总分\t\t平均分\n") ;printf("\t%d\t\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%d\t\t%.1f\n", count, p->student.xuehao, p->student.name,p->student.Advanced, p->student.C_language_programming, p->student.English, p->student.total,p->student.average) ;}printf("\n\t请键入任意键退出\n") ;getch() ;}void swap (Linklist_student a, Linklist_student b) {//交换结点数据域Item r = a->student ;a->student = b->student ;b->student = r ;}void sort () {//学生信息链表的排序system("cls") ;puts("\n\n\n\n\n\n\t\t\t\t\t\t 请选择以什么顺序输出学生成绩:") ;puts("\t\t\t\t\t\t ****************************") ;puts("\t\t\t\t\t\t\t 1.总分") ;puts("\t\t\t\t\t\t\t 2.高数") ;puts("\t\t\t\t\t\t\t 3.大英") ;puts("\t\t\t\t\t\t\t 4.c语言") ;puts("\t\t\t\t\t\t\t 5.学号") ;puts("\t\t\t\t\t\t ****************************") ;printf("\t\t\t\t\t\t ") ;int n ;scanf("%d", &n) ;fflush(stdin) ;Linklist_student q = head->next ;int flag = 1 ;for (int i=0; i<changdu && flag; i++) {q = head->next ;flag = 0 ;for (; q->next != NULL; q = q->next)if (n<1 || n>6) {puts("输入错误, 请重新输入:") ;sort() ;break ;}else if (n==1 && q->student.total < q->next->student.total) {flag = 1 ;swap(q, q->next) ;}else if (n==2 && strcmp(q->student.Advanced, q->next->student.Advanced)<0) {flag = 1 ;swap(q, q->next) ;}else if (n==3 && strcmp(q->student.English, q->next->student.English)<0) {flag = 1 ;swap(q, q->next) ;}else if (n==4 && strcmp(q->student.C_language_programming, q->next->student.C_language_programming)<0) {flag = 1 ;swap(q, q->next) ;}else if (n==5 && strcmp(q->student.xuehao, q->next->student.xuehao)>0) {flag = 1 ;swap(q, q->next) ;}}}void Performance_analysis (Linklist_student phead) {//学生成绩分析system("cls") ;Linklist_student p = phead->next ;if (p && phead) {int c1, c2, c3, m1, m2, m3, y1, y2, y3 ;int gs_max, dy_max, cyy_max ;int gs_min, dy_min, cyy_min ;int sum_gs, sum_dy, sum_cyy ;float aver_gs, aver_dy, aver_cyy ;gs_max = gs_min = atoi(p->student.Advanced) ;dy_max = dy_min = atoi(p->student.English) ;cyy_max = cyy_min = atoi(p->student.C_language_programming) ;sum_gs = sum_dy = sum_cyy = 0 ;aver_gs = aver_dy = aver_cyy = 0 ;c1 = c2 = c3 = 0 ;m1 = m2 = m3 = 0 ;y1 = y2 = y3 = 0 ;while (p) {sum_gs += atoi(p->student.Advanced) ;sum_dy += atoi(p->student.English) ;sum_cyy += atoi(p->student.C_language_programming) ;if (gs_max<atoi(p->student.Advanced))gs_max = atoi(p->student.Advanced) ;if (gs_min>atoi(p->student.Advanced))gs_min = atoi(p->student.Advanced) ;if (dy_max>atoi(p->student.English))dy_max = atoi(p->student.English) ;if (dy_min>atoi(p->student.English)) ;dy_min = atoi(p->student.English) ;if (cyy_max<atoi(p->student.C_language_programming))cyy_max = atoi(p->student.C_language_programming) ;if (cyy_min>atoi(p->student.C_language_programming))cyy_min = atoi(p->student.C_language_programming) ;if (atoi(p->student.C_language_programming)>=60) {c2 ++ ;if (atoi(p->student.C_language_programming)>=85)c3 ++ ;}else c1 ++ ;if (atoi(p->student.Advanced)>=60) {m2 ++ ;if (atoi(p->student.Advanced)>=85)m3 ++ ;}else m1 ++ ;if (atoi(p->student.English)>=60) {y2 ++ ;if (atoi(p->student.English)>=85)y3 ++ ;}else y1 ++ ;p = p->next ;}aver_gs = sum_gs / (changdu + 0.0) ;aver_dy = sum_dy / (changdu + 0.0) ;aver_cyy = sum_cyy / (changdu + 0.0) ;printf("\n\n\n\n\n\n\t\t\t 及格人数\t 优秀人数\t 不及格人数\t最高分\t最低分\t 平均分\n\n") ;printf("\t\t高数\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%.1f\n\n", m2, m3, m1, gs_max, gs_min, aver_gs) ;printf("\t\tc语言\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%.1f\n\n", c2, c3, c1, cyy_max, cyy_min, aver_cyy) ;printf("\t\t大英\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%.1f\n\n", y2, y3, y1, dy_max, dy_min, aver_dy) ;}elseputs("\n\n\n\n\n\n\t\t\t 无学生信息!") ;printf("\t\t请键入任意键返回上一层!") ;getch() ;}void Print1 () {//打印学生信息system("cls") ;Linklist_student p = head->next ;int n = 1 ;if (p == NULL || head == NULL)printf("\n\n\n\t无学生信息!\n") ;else {printf("\n\n\n\n\t排名\t\t\t学号\t\t\t姓名\t\t高数\t\tc语言\t\t大英\t\t总分\t\t平均分\n") ;while (p) {printf("\t%d\t\t\t%s\t\t%s\t\t%d\t\t%d\t\t%d\t\t%d\t\t%.1f\n", n++, p->student.xuehao, p->student.name,atoi(p->student.Advanced), atoi(p->student.C_language_programming), atoi(p->student.English), p->student.total,p->student.average) ;p = p->next ;}}printf("\t请键入任意键返回上一层\n") ;getch() ;}int change2(Linklist_aap phead, const char * q) {//密码修改Linklist_aap p = phead->next ;while (p && strcmp(p->account_password.account, q) != 0)p = p->next ;if (p == NULL) {puts("\t\t\t\t\t输入错误, 未找到该账号!") ;puts("\t\t\t\t\t 请键入任意键返回上一层!") ;getch() ;return 0 ;}else {char a[20], b[20] ;printf("\t\t\t\t\t请输入原密码:\n\t\t\t\t\t") ;password_input(a) ;if (strcmp(a, p->account_password.password)==0) {puts("\n\t\t\t\t\t请输入修改后的密码:") ;printf("\t\t\t\t\t") ;password_input(a) ;puts("\n\t\t\t\t\t请再输入一遍以确认:") ;printf("\t\t\t\t\t") ;password_input(b) ;if (strcmp(a, b) != 0) {puts("\n\t\t\t\t\t两次输入不一致!\n\t\t\t\t\t请键入任意键返回上一层!") ;return 0 ;}else {puts("\n\t\t\t\t\t修改成功!") ;strcpy(p->account_password.password, a) ;puts("\t\t\t\t\t 请键入任意键返回上一层!") ;getch() ;return 1 ;}}else {puts("\n\t\t\t\t\t原密码错误!\n\t\t\t\t\t请键入任意键返回上一层!") ;getch() ;return 0 ;}}}void del2(Linklist_aap phead) {//账号信息删除Linklist_aap q = phead->next, p = phead->next ;char account[9] ;printf("请输入要删除的账号:") ;s_gets(account, 10) ;while (q && strcmp(q->account_password.account, account) != 0) {p = q ;q = q->next ;}if (q == NULL)puts("输入错误, 未找到该账号!") ;else {if (q == phead->next)phead->next = q->next ;elsep->next = q->next ;puts("已删除!") ;free(q) ;}printf("请键入任意字符退出\n") ;getch() ;}void add2(Linklist_aap phead) {//添加账号信息Linklist_aap p = phead, q ;while (p->next)p = p->next ;printf("\t\t\t\t\t请输入要添加的账号:\n\t\t\t\t\t") ;char a[9], b[MAX], c[MAX] ;s_gets(a, 9) ;printf("\n\t\t\t\t\t请输入密码:\n\t\t\t\t\t") ;password_input(b) ;printf("\n\t\t\t\t\t请再输入一遍密码进行确认:\n\t\t\t\t\t") ;password_input(c) ;if (strcmp(b, c)) {puts("\n\t\t\t\t\t两次输入不一致!") ;puts("\n\t\t\t\t\t请键入任意键返回上一层!") ;getch() ;}else {q = (Linklist_aap) malloc(sizeof(Node_aap)) ;strcpy(q->account_password.account, a) ;strcpy(q->account_password.password, b) ;p->next = q ;q->next = NULL ;puts("\n\t\t\t\t\t注册成功!") ;puts("\n\t\t\t\t\t请键入任意键返回上一层!") ;getch() ;}}int Print2 (Linklist_aap phead) {//打印账号信息Linklist_aap p = phead->next ;if (phead == NULL || p == NULL) {puts("\t\t\t\t\t无账号信息!") ;if (phead)return 1 ;elsereturn 0 ;}else {while (p) {printf("\t\t\t\t\t账号\t\t密码\n") ;printf("\t\t\t\t\t%s\t\t%s\n", p->account_password.account, p->account_password.password) ;p = p->next ;}return 0 ;}}void Print3(Linklist_aap phead) {//打印要查找的账号信息char a[9] ;printf("\t\t\t\t\t请输入要查找的账号:\n") ;s_gets(a, 9) ;Linklist_aap p = phead -> next ;while (p && strcmp(a, p->account_password.account) != 0)p = p->next ;if (p==NULL)printf("\t\t\t\t\t输入错误, 未找到该账号!\n") ;elseprintf("\t\t\t\t\t账号:%s\n密码:%s\n", p->account_password.account, p->account_password.password) ;printf("\t\t\t\t\t请键入任意键返回上一层!") ;getch() ;}void manager_interface() {//管理员端manager_login() ;manager_power() ;}void manager_login () {//管理员登录验证system("cls") ;char a[MAX], b[MAX] ;FILE * fp = fopen("manager_cAp.txt", "rt") ;fscanf(fp, "%s\n", b) ;int j ;for(j=0; j<3; j++) {putchar('\n') ;int i = 0 ;printf("\t 请输入密码:") ;while (i<19) {char ch ;ch = getch() ;if (ch == '\n' || ch == '\r') {a[i] = '\0' ;break ;}else if (ch == '\b') {printf("\b \b") ;if (i>0)a[--i] = '\0' ;}else {a[i++] = ch ;putchar('*') ;}}a[19] = '\0' ;if (strcmp(b, a) == 0) {manager_power() ;break ;}}if (j==3)puts("\n您已经输错三次!系统将强制退出!") ;exit(1) ;}void manager_power () {//管理员功能system("cls") ;puts("\n\n\n\n\n\n\t\t\t\t\t欢迎进入管理员界面") ;puts("\t\t\t\t ****************************") ;puts("\t\t\t\t\t1.管理学生账号信息") ;puts("\t\t\t\t\t2.管理教师账号信息") ;puts("\t\t\t\t\t3.修改密码") ;puts("\t\t\t\t\t4.返回上一层") ;puts("\t\t\t\t\t0.退出") ;puts("\t\t\t\t ****************************") ;int x ;printf("\t\t\t\t\t请输入你要进行的操作:\n\t\t\t\t\t") ;do {scanf("%d", &x) ;fflush(stdin) ;switch (x) {case 1 :student_handle() ;break ;case 2 :teacher_handle() ;break ;case 3 :password_change() ;manager_interface() ;break ;case 4 :show() ;case 0 :printf ("\n\t\t\t\t\t您选择了退出!") ;sleep (1) ;printf ("\n\t\t\t\t\t正在退出...") ;sleep (1) ;printf ("\n\t\t\t\t\t已退出\n") ;exit(0) ;default :printf("\n\t\t\t\t\t输入错误, 请重新输入:\n\t\t\t\t\t") ;printf("请键入任意键重新进行选择!") ;getch() ;}manager_power() ;}while (x != 0) ;}void password_change() {//管理员密码修改char a[MAX], b[MAX] ;printf("\n\n\n\n\n\n\t\t\t\t\t请输入修改后的密码:\n\t\t\t\t\t") ;password_input(a) ;printf("\n\n\t\t\t\t\t请再输入一遍已确认:\n\t\t\t\t\t") ;password_input(b) ;FILE * fp = fopen("manager_cAp.txt", "wt") ;if (strcmp(a, b) != 0)puts("\n\t\t\t\t\t两次输入不一致!") ;else {puts("修改成功!") ;fprintf(fp, "%s\n", a) ;}fclose(fp) ;}void student_handle() {//对学生的操作system ("cls") ;puts ("\n\n\n\n\n\n\t\t\t\t\t**************************") ;puts("\t\t\t\t\t 1.修改学生账号") ;puts("\t\t\t\t\t 2.删除学生账号") ;puts("\t\t\t\t\t 3.查找学生账号") ;puts("\t\t\t\t\t 4.添加学生账号") ;puts("\t\t\t\t\t 5.返回上一层") ;puts("\t\t\t\t\t 0.退出") ;puts ("\t\t\t\t\t**************************") ;printf ("\t\t\t\t\t请选择你要进行的操作:\n\t\t\t\t\t") ;int x ;do {scanf("%d", &x) ;int y ;fflush(stdin) ;if (x!=0 && x!=4 && x!=5)y = Print2(aap_s) ;if (y) {switch (x) {case 1 :printf("\t\t\t\t\t请输入你要修改的账号:") ;printf("\n\t\t\t\t\t ") ;char a[9] ;s_gets(a, 9) ;change2(aap_s, a) ;entering2(aap_s, 1) ;break ;case 2 :del2(aap_s) ;break ;case 3 :Print3(aap_s) ;break ;case 4 :add2(aap_s) ;entering2(aap_s, 1) ;break ;case 5 :manager_power() ;break ;case 0 :entering1(head) ;printf("\n\t\t\t\t\t您选择了退出!") ;sleep(1) ;printf("\n\t\t\t\t\t正在退出...") ;sleep(1) ;printf("\n\t\t\t\t\t已退出\n") ;exit (0) ;default :printf ("\t\t\t\t\t输入有误, 请重新输入:\n");printf("\t\t\t\t\t请键入任意键重新进行选择!") ;getch() ;}}else {printf("\t\t\t\t\t请键入任意键返回上一层!") ;getch() ;}student_handle() ;}while (x != 0) ;}void teacher_handle() {//对教师的操作system ("cls") ;puts ("\n\n\n\n\n\n\t\t\t\t\t**************************") ;puts("\t\t\t\t\t\t 1.修改教师账号") ;puts("\t\t\t\t\t\t 2.删除教师账号") ;puts("\t\t\t\t\t\t 3.查找教师账号") ;puts("\t\t\t\t\t\t 4.添加教师账号") ;puts("\t\t\t\t\t\t 5.返回上一层") ;puts("\t\t\t\t\t\t 0.退出") ;puts ("\t\t\t\t\t**************************") ;printf ("\t\t\t\t\t请选择你要进行的操作:\n\t\t\t\t\t") ;int x ;do {scanf("%d", &x) ;fflush(stdin) ;int y ;if (x!=0 && x!=4 && x!=5)y = Print2(aap_t) ;if (y) {switch (x) {case 1 :printf("\t\t\t\t\t请输入你要修改的账号:") ;char a[9] ;s_gets(a, 9) ;change2(aap_t, a) ;entering2(aap_t, 2) ;break ;case 2 :del2(aap_t) ;break ;case 3 :Print3(aap_t) ;break ;case 4 :add2(aap_t) ;entering2(aap_t, 2) ;break ;case 5 :manager_power() ;break ;case 0 :entering1(head) ;printf("\n\t\t\t\t\t您选择了退出!") ;sleep(1) ;printf("\n\t\t\t\t\t正在退出...") ;sleep(1) ;printf("\n\t\t\t\t\t已退出\n") ;exit (0) ;default :printf ("\t\t\t\t\t输入有误, 请重新输入:\n");printf("\t\t\t\t\t请键入任意键重新进行选择!") ;getch() ;}}else {printf("\t\t\t\t\t请键入任意键返回上一层!") ;getch() ;}teacher_handle() ;}while (x != 0) ;}void teacher_power (const char * p) {//教师功能system ("cls") ;puts ("\n\n\n\n\n\n\t\t\t\t\t**************************") ;puts ("\t\t\t\t\t 1.学生信息录入") ;puts ("\t\t\t\t\t 2.增添学生信息") ;puts ("\t\t\t\t\t 3.删除学生信息") ;puts ("\t\t\t\t\t 4.修改学生信息") ;puts ("\t\t\t\t\t 5.查找学生信息") ;puts ("\t\t\t\t\t 6.打印学生信息") ;puts ("\t\t\t\t\t 7.成绩分析") ;puts ("\t\t\t\t\t 8.修改密码") ;puts ("\t\t\t\t\t 9.返回上一层") ;puts ("\t\t\t\t\t 0.退出") ;puts ("\t\t\t\t\t**************************") ;printf ("\n\t\t\t\t\t请选择你要进行的操作:\n\t\t\t\t\t") ;int x ;do {scanf ("%d", &x) ;fflush (stdin) ;switch (x) {case 1 :head = chuangjian () ;break ;case 2 :add1 (head) ;break ;case 3 :del1 (head) ;break ;case 4 :change1 (head) ;break ;case 5 :find1 (head) ;break ;case 6 :sort() ;Print1 () ;break ;case 7 :Performance_analysis(head) ;break ;case 8 :if (change2(aap_t, p)) {entering2(aap_t, 2) ;show() ;}break ;case 9 :show() ;break ;case 0 :entering1(head) ;printf("\n\t\t\t\t\t您选择了退出!") ;sleep(1) ;printf("\n\t\t\t\t\t正在退出...") ;sleep(1) ;printf("\n\t\t\t\t\t已退出\n") ;exit (0) ;default :printf ("\t\t\t\t\t输入有误, 请重新输入:\n");printf("请键入任意键重新进行选择!") ;getch() ;}teacher_power(p) ;}while (x != 0) ;}void show () {//系统界面system("cls") ;printf("\n\n\n\n\n\n\t\t\t\t\t 欢迎进入yjh728的学生管理系统\n") ;printf("\t\t\t\t\t ****************************\n") ;printf("\t\t\t\t\t 1.学生登录 \n\t\t\t\t\t 2.教师登录\n") ;printf("\t\t\t\t\t 3.管理员登录 \n\t\t\t\t\t 0.退出\n") ;printf("\t\t\t\t\t ****************************\n") ;printf("\t\t\t\t\t 请选择身份进行登录\n\t\t\t\t\t ") ;int x ;fflush(stdin) ;do {scanf("%d", &x) ;fflush(stdin) ;switch (x) {case 1 :student_interface () ;break ;case 2 :login(2) ;break ;case 3 :manager_interface () ;break ;case 0 :entering1(head) ;entering2(aap_s, 1) ;entering2(aap_t, 2) ;printf("\n\t\t\t\t\t 您选择了退出!") ;sleep(1) ;printf("\n\t\t\t\t\t 正在退出...") ;sleep(1) ;printf("\n\t\t\t\t\t 已退出\n") ;exit (0) ;default :printf("\t\t\t\t\t 输入错误, 请重新选择!\n") ;printf("\t\t\t\t\t 请键入任意键重新进行选择!") ;getch() ;}show() ;}while (x != 0) ;}char * s_gets (char * p, int n) {//字符串输入及处理char * q, * find ;q = fgets(p, n, stdin) ;if (q) {find = strchr(p, '\n') ;if (find)* find = '\0' ;elsewhile (getchar() != '\n')continue ;}return q ;}

主函数

#include "head.h"Linklist_student head = NULL ;//学生信息链表Linklist_aap aap_s = NULL ; //学生账号信息链表Linklist_aap aap_t = NULL ; //教师账号信息链表int changdu = 0 ;int main(){head = export1() ; //学生信息从文件导入链表aap_s = export2(1) ; //学生账号导入链表aap_t = export2(2) ; //教师账号导入链表show() ; //学生管理系统界面return 0 ;}

六、总结

第一次写这么长的代码,确实挺累的,但收获也不小,但是还有还不够完善,比如密码加密未完成,还有这个系统只能管理一个班级,若要实现多个班级的成绩管理就不嗯呢该完成了……

最后的最后,这是我的第一篇博客,希望对浏览的人能有所帮助,也希望之后的自己能变得更好,加油!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。