C語言學生成績管理系統(C語言課程設計)


1. 前言

目前課程設計已經上傳到github上,並且在不斷的更新,希望大家支持
訪問地址

本篇源碼請在文章末尾獲取

2. 需求分析

用戶:管理員,老師,學生

管理員:添加老師,編輯老師的信息

老師:添加學生,添加學生成績,修改學生成績

學生:查看自己的成績

3. 項目截圖

在這里插入圖片描述
在這里插入圖片描述
!
在這里插入圖片描述
在這里插入圖片描述

以上就是基本的功能,其他功能小伙伴可以自己摸索

源碼

main.c 文件

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <conio.h>
//#include "getch.h"
#include <string.h>
#include <stddef.h>

#define pf printf
#define sf scanf
#define MAX_STU 100
#define MAX_TEA 50

typedef struct Student
{
	char name[20];
	char sex;
	char id[20];
	char passwd[20];
	short chinese;
	short english;
	short math;
	short time;
	short birth;
	short exist;
}Student;

typedef struct Teacher
{
	char name[20];
	char sex;
	char id[20];
	char passwd[20];
	short time;
	short birth;
	short exist;
}Teacher;

typedef struct Admin
{
	char id[20];
	char passwd[20];
	short birth;
}Admin;

// 聲明全局變量
Student* STU;
Teacher* TEA;
Admin* ADM;

// 下標
int temp = 0;
int pos = 0;
int i = 0;

// 系統初始化
void sams_init(void);
// 系統開始運行
void sams_start(void);
// 系統結束
void sams_exit(void);

// 管理子系統菜單
void admin_menu(void);
// 管理員添加老師
void admin_add_tea(void);
// 管理員刪除老師
void admin_del_tea(void);
// 管理員重置老師
void admin_reset_tea(void);
// 管理員顯示在職教師列表
void admin_list_tea(void);
// 管理員顯示離職教師列表
void admin_list_ubtea(void);
// 管理員修改密碼
void admin_change_pw(void);
// 管理員登錄
bool admin_login(void);
// 運行管理員子系統
void admin_start(void);

// 學生子系統菜單
void student_menu(void);
// 學生查詢成績
void student_find_score(void);
// 學生查詢成績
void student_find_score(void);
// 學生修改密碼
void student_ch_pw(void);
// 學生查詢個人信息
void student_find_info(void);
// 學生登錄
int student_login(void);
// 運行學生子系統
void student_start(void);

// 老師子系統菜單
void teacher_menu(void);
// 老師添加學生
void teacher_add_stu(void);
// 老師刪除學生
void teacher_del_stu(void);
// 老師查詢學生
void teacher_find_stu(void);
// 老師修改學生信息
void teacher_ch_stu_info(void);
// 老師添加學生成績
void teacher_add_stu_score(void);
// 老師重置學生密碼
void teacher_reset_stu_pw(void);
// 老師顯示在校學生列表
void teacher_list_stu(void);
// 老師顯示退學學生列表
void teacher_list_ubstu(void);
// 老師修改密碼
void teacher_ch_pw(void);
// 老師登錄
int teacher_login(void);
// 老師登錄
int teacher_login(void);
// 運行老師子系統
void teacher_start(void);

// 獲取字符串
char* get_str(char* str,size_t len);
// 清理緩沖區
void clear_stdin(void);
// 獲取性別
char get_sex(void);
// 獲取鍵盤指令
char get_cmd(char start,char end);
// 獲取密碼
char* get_pw(char* passwd,bool is_show,size_t size);

// 主函數
int main()
{
	sams_init();
	
	sams_start();

	sams_exit();
}

// 主菜單
void sams_menu(void)
{
	pf("***歡迎使用指針學生成績管理系統***\n");
	pf("1、管理員子系統\n");
	pf("2、教師子系統\n");
	pf("3、學生子系統\n");
	pf("4、退出系統\n");
	pf("-----------------------------\n");
}

// 系統初始化
void sams_init(void)
{
	// 申請堆內存、加載數據
	STU = calloc(MAX_STU,sizeof(Student));
	TEA = calloc(MAX_TEA,sizeof(Teacher));
	ADM = calloc(1,sizeof(Admin));
	pf("系統初始化...\n");

	FILE* afrp = fopen("admin.txt","r");
	int num = 0;
	num = fscanf(afrp,"%s %s %hd",ADM[0].id,ADM[0].passwd,&ADM[0].birth);
	fclose(afrp);

	FILE* sfrp = fopen("stu.txt","r");
	for(i=0; i<100; i++)
	{
		int num = 0;
		num = fscanf(sfrp,"%s %c %s %s %hd %hd %hd %hd %hd %hd",STU[i].name,&STU[i].sex,STU[i].id,STU[i].passwd,&STU[i].chinese,&STU[i].english,&STU[i].math,&STU[i].time,&STU[i].birth,&STU[i].exist);
	}
	fclose(sfrp);

	FILE* tfrp = fopen("tea.txt","r");
	for(i=0; i<50; i++)
	{
		int num = 0;
		num = fscanf(tfrp,"%s %c %s %s %hd %hd %hd",TEA[i].name,&TEA[i].sex,TEA[i].id,TEA[i].passwd,&TEA[i].time,&TEA[i].birth,&TEA[i].exist);
	}
	fclose(tfrp);
}

// 系統開始運行
void sams_start(void)
{
	// 進入系統的業務流程控制
	pf("系統開始運行...\n");
	while(true)
	{
		sams_menu();
		switch(get_cmd('1','4'))
		{
			case '1': admin_start(); break;
			case '2': teacher_start(); break;
			case '3': student_start(); break;
			case '4': return;
		}
	}
}

// 系統結束
void sams_exit(void)
{
	FILE* afwp = fopen("admin.txt","w");	
	int num = 0;
	num = fprintf(afwp,"%s %s %hd",ADM[0].id,ADM[0].passwd,ADM[0].birth);
	fclose(afwp);

	FILE* sfwp = fopen("stu.txt","w");
	for(i=0; i<100; i++)
	{
		int num = 0;
		if(STU[i].sex != 0)
		{
			num = fprintf(sfwp,"%s %c %s %s %hd %hd %hd %hd %hd %hd\n",STU[i].name,STU[i].sex,STU[i].id,STU[i].passwd,STU[i].chinese,STU[i].english,STU[i].math,STU[i].time,STU[i].birth,STU[i].exist);
		}
	}
	fclose(sfwp);

	FILE* tfwp = fopen("tea.txt","w");
	for(i=0; i<50; i++)
	{
		int num = 0;
		if(TEA[i].sex != 0)
		{
			num = fprintf(tfwp,"%s %c %s %s %hd %hd %hd\n",TEA[i].name,TEA[i].sex,TEA[i].id,TEA[i].passwd,TEA[i].time,TEA[i].birth,TEA[i].exist);
		}	
	}
	fclose(tfwp);
	// 釋放內存、保存數據
	free(STU);
	free(TEA);
	free(ADM);
	pf("系統退出...\n");
}

// 管理子系統菜單
void admin_menu(void)
{
	pf("\n進入管理子系統...\n");
	pf("1、添加教師\n");
	pf("2、刪除教師\n");
	pf("3、重置並解鎖教師密碼\n");
	pf("4、顯示在職教師\n");
	pf("5、顯示已離職教師\n");
	pf("6、修改自己密碼\n");
	pf("7、返回上一級\n");
	pf("-----------------\n");
}

// 管理員添加老師
void admin_add_tea(void)
{
	pf("添加教師\n");
	char Cteacher_name[20];
	char Cteacher_sex;
	char Cteacher_id[20];
	char Cteacher_pw[20];
	pf("請輸入教師姓名:");
	get_str(Cteacher_name,20);
	pf("請輸入教師性別:");
	Cteacher_sex = get_sex();
	pf("請輸入教師工號:");
	get_str(Cteacher_id,20);
	pf("請輸入教師密碼:");
	get_str(Cteacher_pw,20);
	int pos = -1; //插入的位置
	pf("id:%s。\n",TEA[0].id);
	for(i=0; i<50; i++)
	{
		if(TEA[i].sex == '\0' && pos == -1)
		{
			pf("pos已定位\n");
			pos = i;
		}
		if(strcmp(TEA[i].id,Cteacher_id)==0)
		{
			pf("工號重復,請重新輸入!\n");
			break;
		}
		if(i==49)
		{
			strcpy(TEA[pos].name,Cteacher_name);
			TEA[pos].sex = Cteacher_sex;
			strcpy(TEA[pos].id,Cteacher_id);
			strcpy(TEA[pos].passwd,Cteacher_pw);
			pf("添加成功。\n");
		}
	}
	pf("id:%s。\n",TEA[0].id);
}

// 管理員刪除老師
void admin_del_tea(void)
{
	pf("刪除教師\n");
	pf("請輸入教師工號:");
	char Cteacher_id[20]={};	
	get_str(Cteacher_id,20);
	for(i=0; i<50; i++)
	{
		if(strcmp(Cteacher_id,TEA[i].id)==0)
		{
			TEA[i].exist = 1;
			pf("刪除成功!\n");			
			break;
		}
		if(i==49)
		{
			pf("無此工號!\n");
		}
	}
	
}

// 管理員重置老師
void admin_reset_tea(void)
{
	pf("重置密碼\n");
	pf("請輸入教師工號:");
	char Cteacher_id[20]={};
	get_str(Cteacher_id,20);
	char Cteacher_pw[20] = "123";
	for(i=0; i<50; i++)
	{
		if(strcmp(TEA[i].id,Cteacher_id)==0)
		{
			TEA[i].time = 0;
			TEA[i].birth = 0;
			TEA[i].exist = 0;
			strcpy(TEA[i].passwd,Cteacher_pw); 
			pf("重置成功!\n");
			break;
		}
		if(i==49)
		{
			pf("無此工號.\n");	
		}	
	}

}

// 管理員顯示在職教師列表
void admin_list_tea(void)
{
	pf("顯示在職教師");
	for(i=0; i<50; i++)
	{
		if(TEA[i].sex != '\0')
		{
			if(TEA[i].exist != 1)
			{
				pf("\n姓名:%s 性別:%c 工號:%s",TEA[i].name,TEA[i].sex,TEA[i].id);
			}
		}
		else
		{
			break;
		}
	}
}

// 管理員顯示離職教師列表
void admin_list_ubtea(void)
{
	pf("顯示離職教師");
	for(i=0; i<50; i++)
	{
		if(TEA[i].sex != '\0')
		{
			if(TEA[i].exist == 1)
			{
				pf("\n姓名:%s 性別:%c 工號:%s",TEA[i].name,TEA[i].sex,TEA[i].id);
			}
		}
		else
		{
			break;
		}
	}
}

//char admin_pw[20]="123";
//strcpy(admin_pw,admin_passwd);

// 管理員修改密碼
void admin_change_pw(void)
{
	char old_pw[20]={};
	char new_pw[20]={};
	char new_two_pw[20]={};
	pf("請輸入原密碼:");
	get_pw(old_pw,true,20);
	printf("\n");
	pf("請輸入新密碼:");
	get_pw(new_pw,true,20);
	printf("\n");
	pf("請再次輸入新密碼:");
	get_pw(new_two_pw,true,20);
	printf("\n");
	if(strcmp(old_pw,ADM[0].passwd)==0)
	{
		if(strcmp(new_pw,new_two_pw)==0)
		{
			pf("修改密碼成功\n");
			if(ADM[0].birth==0)
			{
				ADM[0].birth = 1;
			}
			strcpy(ADM[0].passwd,new_pw);
		}
		else
		{
			pf("兩次密碼不一致\n");
		}
	}
	else
	{
		pf("原密碼錯誤。\n");
	}
}

// 管理員登錄
bool admin_login(void)
{
	//char admin_id[20] = "admin";
	char Cadmin_id[20]={};
	char Cadmin_pw[20]={};
	pf("請輸入用戶名:");
	get_str(Cadmin_id,20);
	if(Cadmin_id[0]=='\0')
	{
		pf("用戶名不能為空!\n");
		return false;
	}
	//pf("*%s*\n",Cadmin_id);
	pf("請輸入密碼:");
	get_pw(Cadmin_pw,true,20);
	//printf("\n*%s*",Cadmin_pw);
	printf("\n");
	if(strcmp(Cadmin_id,ADM[0].id)==0 && strcmp(Cadmin_pw,ADM[0].passwd)==0)
	{
		//printf("正確\n");
		return true;
	}
	else
	{
		return false;
	}
}

// 運行管理員子系統
void admin_start(void)
{
	if(!admin_login())
	{
		pf("登錄失敗!\n");
		return;
	}
	while(true)
	{
		if(ADM[0].birth==0)
		{
			admin_change_pw();
		}
		else
		{
			admin_menu();
			switch(get_cmd('1','7'))
			{
				case '1': admin_add_tea(); break;
				case '2': admin_del_tea(); break;
				case '3': admin_reset_tea(); break;
				case '4': admin_list_tea(); break;
				case '5': admin_list_ubtea(); break;
				case '6': admin_change_pw(); break;
				case '7': return;
			}
		}
	}
}


// 學生子系統菜單
void student_menu(void)
{
	pf("進入學生子系統...\n");
	pf("1、查詢成績\n");
	pf("2、修改密碼\n");
	pf("3、查看個人信息\n");
	pf("4、返回上一級\n");
	pf("---------------\n");
}

// 學生查詢成績
void student_find_score(void)
{
	pf("成績查詢\n");
	pf("語文:%hd ,英語: %hd ,數學: %hd\n",STU[temp].chinese,STU[temp].english,STU[temp].math);
}

// 學生修改密碼
void student_ch_pw(void)
{
	char old_stu_pw[20]={};
	char new_stu_pw[20]={};
	char new_stu_two_pw[20]={};
	pf("請輸入原密碼:");
	get_pw(old_stu_pw,true,20);
	printf("\n");
	pf("請輸入新密碼:");
	get_pw(new_stu_pw,true,20);
	printf("\n");
	pf("請再次輸入新密碼:");
	get_pw(new_stu_two_pw,true,20);
	printf("\n");
	if(strcmp(old_stu_pw,STU[temp].passwd)==0)
	{
		if(strcmp(new_stu_pw,new_stu_two_pw)==0)
		{
			pf("修改密碼成功\n");
			if(STU[temp].birth==0)
			{
				STU[temp].birth = 1;
			}
			strcpy(STU[temp].passwd,new_stu_pw);
		}
		else
		{
			pf("兩次密碼不一致\n");
		}
	}
	else
	{
		pf("原密碼錯誤。\n");
	}
}

// 學生查詢個人信息
void student_find_info(void)
{
	pf("個人信息\n");
	pf("姓名:%s ,性別:%c ,學號: %s\n",STU[temp].name,STU[temp].sex,STU[temp].id);
}

// 學生登錄
int student_login(void)
{
	char Cstudent_id[20]={};
	char Cstudent_pw[20]={};
	pf("請輸入用戶名:");
	get_str(Cstudent_id,20);
	if(Cstudent_id[0]=='\0')
	{
		pf("用戶名不能為空!\n");
		return -1;
	}
	//pf("*%s*\n",Cstudent_id);
	pf("請輸入密碼:");
	get_pw(Cstudent_pw,true,20);
	//printf("\n*%s*",Cstudent_passwd);
	printf("\n");
	for(i=0; i<100; i++)
	{
		if(strcmp(Cstudent_id,STU[i].id)==0)
		{
			if(STU[i].time==3)
			{
				pf("此學號已被鎖定,請找教師解鎖。\n");
				return -1;
			}
			if(STU[i].exist==1)
			{
				pf("此學生已退學。\n");
				return -1;
			}
			if(strcmp(Cstudent_pw,STU[i].passwd)==0)
			{
				return i;
			}
			else
			{	
				STU[i].time++;
				pf("密碼錯誤.\n");
				return -1;
			}
		}
	}
	pf("不存在此學生。\n");
	return -1;
}

// 運行學生子系統
void student_start(void)
{
	temp = student_login();
	if(temp==-1)
	{
		pf("登錄失敗!\n");
		return;
	}
	while(true)
	{
		if(STU[temp].birth==0)
		{
			student_ch_pw();
		}
		else
		{
			student_menu();
			switch(get_cmd('1','4'))
			{
				case '1': student_find_score(); break;
				case '2': student_ch_pw(); break;
				case '3': student_find_info(); break;		
				case '4': return;
			}		
		}	
	}
}


// 老師子系統菜單
void teacher_menu(void)
{
	pf("\n進入教師子系統...\n");
	pf("1、添加學生\n");
	pf("2、刪除學生\n");
	pf("3、查找學生\n");
	pf("4、修改學生信息\n");
	pf("5、錄入學生成績\n");
	pf("6、重置學生密碼\n");
	pf("7、顯示所有在校學生信息\n");
	pf("8、顯示所有退學學生信息\n");
	pf("9、修改自己密碼\n");
	pf("0、返回上一級\n");
	pf("-----------------\n");
}

// 老師添加學生
void teacher_add_stu(void)
{
	pf("添加學生\n");
	char Cstudent_name[20];
	char Cstudent_sex;
	char Cstudent_id[20];
	char Cstudent_pw[20];
	pf("請輸入學生姓名:");
	get_str(Cstudent_name,20);
	pf("請輸入學生性別:");
	Cstudent_sex = get_sex();
	pf("請輸入學生工號:");
	get_str(Cstudent_id,20);
	pf("請輸入學生密碼:");
	get_str(Cstudent_pw,20);
	int pos = -1; //插入的位置
	pf("id:%s。\n",STU[0].id);
	for(i=0; i<100; i++)
	{
		if(STU[i].sex == '\0' && pos == -1)
		{
			pf("pos已定位\n");
			pos = i;
		}
		if(strcmp(STU[i].id,Cstudent_id)==1)
		{
			pf("學號重復,請重新輸入!\n");
			break;
		}
		if(i==99)
		{
			strcpy(STU[pos].name,Cstudent_name);
			STU[pos].sex = Cstudent_sex;
			strcpy(STU[pos].id,Cstudent_id);
			strcpy(STU[pos].passwd,Cstudent_pw);
			pf("添加成功。\n");
		}
	}
	pf("id:%s。\n",STU[0].id);
}

// 老師刪除學生
void teacher_del_stu(void)
{
	pf("刪除學生\n");
	pf("請輸入學生學號:");
	char Cstudent_id[20]={};	
	get_str(Cstudent_id,20);
	for(i=0; i<100; i++)
	{
		if(strcmp(Cstudent_id,STU[i].id)==0)
		{
			STU[i].exist = 1;
			pf("刪除成功!\n");			
			break;
		}
		if(i==99)
		{
			pf("無此學號!\n");
		}
	}
	
}

// 老師查詢學生
void teacher_find_stu(void)
{
	pf("請輸入學生學號:");
	char Cstudent_id[20]={};
	get_str(Cstudent_id,20);
	for(i=0; i<100; i++)
	{
		if(strcmp(Cstudent_id,STU[i].id)==0)
		{
			pf("姓名:%s 性別:%c 學號:%s\n",STU[i].name,STU[i].sex,STU[i].id);
			break;
		}
		else if(i==99)
		{
			pf("無此學號。\n");
		}
	}
}

// 老師修改學生信息
void teacher_ch_stu_info(void)
{
	pf("請輸入學生學號:");
	char Cstudent_id[20]={};
	get_str(Cstudent_id,20);
	for(i=0; i<100; i++)
	{
		if(strcmp(Cstudent_id,STU[i].id)==0)
		{
			char ch_name[20];
			char ch_sex;
			char ch_id[20];
			pf("原信息:姓名:%s 性別:%c 學號:%s\n",STU[i].name,STU[i].sex,STU[i].id);
			pf("請輸入新姓名:");
			get_str(ch_name,20);
			pf("請輸入新性別:");
			if(sf("%c",&ch_sex)==1)
			{
				getchar();
			}
			pf("請輸入新學號:");
			get_str(ch_id,20);
			
			strcpy(STU[i].name,ch_name);
			STU[i].sex = ch_sex;
			strcpy(STU[i].id,ch_id);

			pf("信息修改成功。\n");
			break;
		}
		else if(i==99)
		{
			pf("無此學號。\n");
		}
	}
}

// 老師添加學生成績
void teacher_add_stu_score(void)
{
	pf("請輸入學生學號:");
	char Cstudent_id[20]={};
	get_str(Cstudent_id,20);
	for(i=0; i<100; i++)
	{
		if(strcmp(Cstudent_id,STU[i].id)==0)
		{
			short chinese = 0;
			short english = 0;
			short math = 0;
			pf("原信息:語文:%hd 英語:%hd 數學:%hd\n",STU[i].chinese,STU[i].english,STU[i].math);
			pf("請輸入新語文成績:");
			if(sf("%hd",&chinese)==1)
			{
				getchar();
			}
			pf("請輸入新英語成績:");
			if(sf("%hd",&english)==1)
			{
				getchar();
			}
			pf("請輸入新數學成績:");
			if(sf("%hd",&math)==1)
			{
				getchar();
			}
			
			STU[i].chinese = chinese;
			STU[i].english = english;
			STU[i].math = math;

			pf("信息修改成功。\n");
			break;
		}
		else if(i==99)
		{
			pf("無此學號。\n");
		}
	}
}

// 老師重置學生密碼
void teacher_reset_stu_pw(void)
{
	pf("重置密碼\n");
	pf("請輸入學生學號:");
	char Cstudent_id[20]={};
	get_str(Cstudent_id,20);
	char Cstudent_pw[20] = "123";
	for(i=0; i<100; i++)
	{
		if(strcmp(STU[i].id,Cstudent_id)==0)
		{
			STU[i].time = 0;
			STU[i].birth = 0;
			STU[i].exist = 0;
			strcpy(STU[i].passwd,Cstudent_pw); 
			pf("重置成功!\n");
			break;
		}
		if(i==99)
		{
			pf("無此學號.\n");	
		}	
	}
}

// 老師顯示在校學生列表
void teacher_list_stu(void)
{
	pf("顯示在校學生");
	for(i=0; i<100; i++)
	{
		if(STU[i].sex != '\0')
		{
			if(STU[i].exist != 1)
			{
				pf("\n姓名:%s 性別:%c 學號:%s",STU[i].name,STU[i].sex,STU[i].id);
			}
		}
		else
		{
			break;
		}
	}
}

// 老師顯示退學學生列表
void teacher_list_ubstu(void)
{
	pf("顯示退學學生");
	for(i=0; i<100; i++)
	{
		if(STU[i].sex != '\0')
		{
			if(STU[i].exist == 1)
			{
				pf("\n姓名:%s 性別:%c 工號:%s",STU[i].name,STU[i].sex,STU[i].id);
			}
		}
		else
		{
			break;
		}
	}
}

// 老師修改密碼
void teacher_ch_pw(void)
{
	char old_pw[20]={};
	char new_pw[20]={};
	char new_two_pw[20]={};
	pf("請輸入原密碼:");
	get_pw(old_pw,true,20);
	printf("\n");
	pf("請輸入新密碼:");
	get_pw(new_pw,true,20);
	printf("\n");
	pf("請再次輸入新密碼:");
	get_pw(new_two_pw,true,20);
	printf("\n");
	if(strcmp(old_pw,TEA[pos].passwd)==0)
	{
		if(strcmp(new_pw,new_two_pw)==0)
		{
			pf("修改密碼成功\n");
			if(TEA[pos].birth==0)
			{
				TEA[pos].birth = 1;
			}
			strcpy(TEA[pos].passwd,new_pw);
		}
		else
		{
			pf("兩次密碼不一致\n");
		}
	}
	else
	{
		pf("原密碼錯誤。\n");
	}
}

// 老師登錄
int teacher_login(void)
{
	char Cteacher_id[20]={};
	char Cteacher_pw[20]={};
	pf("請輸入用戶名:");
	get_str(Cteacher_id,20);
	if(Cteacher_id[0]=='\0')
	{
		pf("用戶名不能為空!\n");
		return -1;
	}
	//pf("*%s*\n",Cteacher_id);
	pf("請輸入密碼:");
	get_pw(Cteacher_pw,true,20);
	//printf("\n*%s*",Cadmin_passwd);
	printf("\n");
	for(i=0; i<50; i++)
	{
		if(strcmp(Cteacher_id,TEA[i].id)==0)
		{
			if(TEA[i].time==3)
			{
				pf("此工號已被鎖定,請找管理員解鎖。\n");
				return -1;
			}
			if(TEA[i].exist==1)
			{
				pf("此教師已離職。\n");
				return -1;
			}
			if(strcmp(Cteacher_pw,TEA[i].passwd)==0)
			{
				return i;
			}
			else
			{	
				TEA[i].time++;
				pf("密碼錯誤.\n");
				return -1;
			}
		}
	}
	pf("不存在此教師。\n");
	return -1;
}

// 運行老師子系統
void teacher_start(void)
{
	pos = teacher_login();
	if(pos==-1)
	{
		pf("登錄失敗!\n");
		return;
	}
	while(true)
	{
		if(TEA[pos].birth==0)
		{
			teacher_ch_pw();
			
		}
		else
		{
			teacher_menu();
			switch(get_cmd('0','9'))
			{
				case '1': teacher_add_stu(); break;
				case '2': teacher_del_stu(); break;
				case '3': teacher_find_stu(); break;
				case '4': teacher_ch_stu_info(); break;
				case '5': teacher_add_stu_score(); break;
				case '6': teacher_reset_stu_pw(); break;
				case '7': teacher_list_stu(); break;
				case '8': teacher_list_ubstu(); break;
				case '9': teacher_ch_pw(); break;		
				case '0': return;
			}		
		}
	}
}

/** tools **/
// 清理輸入緩沖區
void clear_stdin(void)
{
	//stdin->_IO_read_ptr = stdin->_IO_read_end;//清理輸入緩沖區
}

// 獲取字符串
char* get_str(char* str,size_t len)
{
	if(NULL == str)
	{
		puts("empty ptr!");
		return NULL;
	}

	char *in=fgets(str,len,stdin);

	size_t cnt = strlen(str);
	if('\n' == str[cnt-1])
	{
		str[cnt-1] = '\0';
	}
	else
	{
		scanf("%*[^\n]");
		scanf("%*c");
	}
	
	clear_stdin();

	return str;
}

// 獲取性別
char get_sex(void)
{
	printf("(m男,w女):");
	while(true)
	{
		char sex = getch();
		if('w' == sex || 'm' == sex)
		{
			printf("%s\n",'w'==sex?"女":"男");
			return sex;
		}
	}
}

// 獲取鍵盤指令
char get_cmd(char start,char end)
{
	clear_stdin();

	printf("請輸入指令:");
	while(true)
	{
		char val = getch();
		if(val >= start && val <= end)
		{
			printf("%c\n",val);
			return val;
		}
	}
}

// 獲取密碼
char* get_pw(char* passwd,bool is_show,size_t size)
{
	if(NULL == passwd) return NULL;

	int count = 0;
	do{
		char val = getch();
		if(8 == val)
		{
			if(count > 0)
			{
				if(is_show)printf("\b \b");
				count--;
			}
			continue;
		}
		else if(13 == val)
		{
			break;
		}
		passwd[count++] = val;
		if(is_show) printf("*");
	}while(count < size -1);

	passwd[count] = '\0';
	return passwd;
}

admin.txt

admin 123 1

stu.txt 文件

a m 1 123 11 11 11 0 0 0
b m 2 2 31 78 99 0 0 1
c w 3 33 31 78 99 0 1 0
d w 4 4 31 78 99 0 0 1
e w 5 5 31 78 99 0 0 0
f w 6 6 31 78 99 0 0 1
g w 7 7 31 78 99 0 0 0

tea.txt 文件

1 w 1 1 1 1 0
22 w 22 22 0 0 1
3 w 3 3 0 1 0

這就是源碼的幾個文件
在這里插入圖片描述

福利

在這里插入圖片描述

還有小伙伴不懂得話,作者公眾號已將文件打包,關注公眾號“程序員小R”,回復“C語言成績系統”獲取該源碼和教程

在這里插入圖片描述

在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM