c语言设计 教师信息管理系统 含源码及说明
基本功能
系统的基本功能
- 文件保存与读取
- 信息安全及权限管理
- 教师信息的录入
- 教师信息的浏览
- 教师信息的修改
- 按条件查询信息
- 统计信息
- 按条件排序
详细设计
详细设计
详细设计是弄清楚用户对目标系统数据处理功能提出的要求,根据系统目标和数据需求并与用户充分讨论后做出的归纳。本系统的功能需求可能归纳为:
- 文件保存与读取
文件保存是可以将用户录入的教师数据保存到一个程序自行创建的一个文件里,用户关闭程序,再次使用本系统时可以直接访问并提取文件中的数据。
信息安全及权限管理
信息安全功能可由用户自行设定需要权限的功能模块,功能类似与手机APP应用锁可选择性地设定需要密码的应用程序,很好的保障了用户信息的安全,又方便第三方的访问。 - 教师信息的录入
录入方面要方便用户把各种数据录入到系统将要建立的新的文件文本中,这些数据包含教师的编号、姓名、性别、年龄、电话、工资、职称、课程名称、班级数。当用户再次录入数据是会自动插入到上一次录入的数据的后面,不会覆盖掉上次录入的数据。 - 教师信息的浏览
按上一次排序的顺序或用户录入的顺序输出所有教师信息数据,这些数据包含教师的编号、姓名、性别、年龄、电话、工资、职称、课程名称、班级数。 - 教师信息的修改
用户能够根据教师号修改数据中的教师姓名、性别、年龄、电话、工资、职称、课程名称、班级数等信息数据。 - 按条件查询信息
用户可以通过教师号、姓名、职称查询到教师完整的信息,用户可以更加方便、快捷地找到自己所需要的信息。 - 统计信息
用户可以利用统计功能了解到教师的工资或年龄平均水平及整体水平
7.按条件排序
用户可以通过条件排序直观的读取到教师的工作水平差异。
功能说明
源代码中已经改页面背景为蓝绿色
- 编译运行代码,进入教师信息管理系统界面并按回车键即可进入教师信息管理系统菜单选项界面。如下图
按回车
在主菜单中输入序号1,回车,输入录入人数,即可录入教师信息。录入完成后按操作提示返回菜单页面。如图
在主菜单中输入序号2回车即可浏览录入的信息
在主菜单中输入序号3回车进入按条件查询界面,输入查询方式的序号即可的查询对应教师信息。
在主菜单中输入序号4回车,进入修改信息界面。输入相应的教师号即可修改教师信息。如图
在主菜单中输入序号5进入统计功能界面,输入要统计选项的序号回车.
在主菜单中输入序号6进入条件排序选项功能界面,输入排序方式的序号并回车即可获得排序结果。如下
在主菜单中输入序号7进入信息安全及权限管理功能界面,按相应要求输入相应的序号即可设置权限或修改密码
在主菜单中输入序号8进入信息保存与读取界面,输入执行的操作序号设置成功后可在文件中查看。如图
源代码
#include<stdio.h>
#include<string.h>
#include <windows.h>
#include<stdlib.h>
int renshu=0,anquan[10]={0},mima=88888888; //全局变量,便于各个函数访问和修改
struct Teacher{
int Num; //编号 -------教师号 《性别,年龄,电话,工资,学历》
char Name[25]; //姓名
char Sex[20]; //性别
int Age; //年龄
long int dianhua; //电话
int money; //工资
char zhicheng[25]; //职称
char Course[50]; //课程编号--------课程名称
int ClassNum; // 班级数
}Tc[100];
void hello() //开始
{ char ttt[] = { "欢迎访问教师信息管理系统!!!" };
int i;
printf("\n 时间:");
system("date/t");
// system ( "time/t " );
printf("\t ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n\n");
puts("\n");
puts("\t ┃ ┃");
puts("\t ┃ ┃");
printf(" ┃ ");
for(i = 0; ttt[i] != '\0'; i++) {
Sleep(100);
printf("%c", ttt[i]);
if(i==1)
system ( " color 1" );
else if (i==2)
system ( " color 2" );
else if (i==3)
system ( " color 3" );
else if (i==4)
system ( " color 4" );
else if (i==5)
system ( " color 5" );
else if (i==6)
system ( " color 6" );
else if (i==7)
system ( " color 7" );
else if (i==8)
system ( " color 8" );
else if (i==9)
system ( " color 9" );
else if (i==10)
system ( " color A" );
else if (i==11)
system ( " color B" );
else if (i==12)
system ( " color 3" );
else if (i==13)
system ( " color 4" );
else if (i==14)
system ( " color 6" );
else if (i==15)
system ( " color 6" );
else if (i==16)
system ( " color 7" );
else if (i==17)
system ( " color 8" );
else if (i==18)
system ( " color 2" );
else if (i==19)
system ( " color 3" );
else if (i==20)
system ( " color 4" );
else if (i==21)
system ( " color 5" );
else if (i==22)
system ( " color 4" );
}
// system ( " color 0 " );
system ( " color B0" );
printf(" ┃ \n");
puts("\t ┃ ┃");
puts("\t ┃ --------------- ┃");
puts("\t ┃ ┃");
puts("\t ┃ ┃ ");
puts("\n \n");
printf("\n\t 请按回车键进入系统……\n");
system ( " color 0 " );
getchar();
system("cls"); //清空屏幕
}
void jieshu() //结束界面
{ system("cls");
printf("\n\n\n");
printf("\n\t ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★\n\n");
puts("\n");
puts("\t ┃ ┃");
puts("\t ┃ ┃");
puts("\t ┃ 感谢访问教师信息管理系统!欢迎下次再来! ┃");
puts("\t ┃ ┃");
puts("\t ┃ ┃");
puts("\t ┃ ┃");
puts("\t ┃ ┃ ");
puts("\n ");
printf("\n\n\n");
}
void caidan() //主菜单
{ printf("\n\n\n\n");
printf(" 时间:");
system("date/t");
// system ( "time/t " );
printf(" ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");
printf(" ☆********************************************************************★\n");
printf(" ★ 教师信息管理系统 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 1.录入教师信息 5.统计信息 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 2.浏览所有教师信息 6. 按条件排序 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 3.按条件查询信息 7.信息安全及权限管理 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 4.修改教师信息 8.文件保存与读取 ☆\n");
printf(" ☆ ★\n");
printf(" ★********************************************************************☆\n");
printf(" ☆ 输入9退出系统 输入10返回主菜单 ★\n");
printf(" ★ ---------------------------------------------- ☆\n");
}
void save() //文件存盘
{
FILE *fp; //定义文件指针
int i;
if((fp=fopen("Tc.txt","w"))==NULL) // 打开文件,没有文件自动创建,‘w’为只写 模式
{
printf("文件打开错误!\n"); //检查文件打开状态,打开不成功则提示
exit(0);
}
for(i=0;i<renshu;i++)
fwrite(&Tc[i],sizeof(struct Teacher),1,fp); //将结构体Tc数据写到文件中
fclose(fp); //关闭文件
printf("\n ★数据保存成功 ★ \n\n ");
}
void load()
{ // 读入函数 磁盘信息读入到内存
FILE *fp; //定义文件指针
int i;
if((fp=fopen("Tc.txt","r"))==NULL) // 打开文件,,‘r’为只读
{
printf("文件打开错误!\n"); //检查文件打开状态,打开不成功则提示
exit(0);
}
for(i=0;!feof(fp);i++)
fread(&Tc[i],sizeof(struct Teacher),1,fp); //将文件数据写到结构体Tc[]中
fclose(fp); //关闭文件
renshu=i-1;
printf("\n ★数据读取成功 ★ \n\n ");
}
void wenjiancaidan() //文件操作菜单
{
system("cls"); //清空屏幕
printf("\n\n\b ★文件保存与读取★ \n");
printf(" ★ ------------------------------------------- ☆\n");
printf(" ☆ ★\n");
printf(" ★ 1.文件保存到磁盘 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 2.从磁盘读取文件 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 3.返回主菜单 ☆\n");
printf(" ☆ ★\n");
printf(" ★ ------------------------------------------- ☆\n");
}
void wenjian() //文件功能主函数
{
int t,i;
wenjiancaidan();
while (1)
{ printf("\n ★请选择您的操作: ");
scanf("%d",&t);
if (t==3) break;
switch (t)
{
case 1: save(); getchar(); break;
case 2: load();getchar(); break;
default:printf("\n ★操作有误!! ★\n");getchar();
}
}
system("cls");
caidan();
}
void anquancaidan() //信息安全及权限管理菜单
{ system("cls"); //清空屏幕
printf("\n\n\b ★信息安全及权限管理★ \n");
printf(" ★ ------------------------------------------- ☆\n");
printf(" ☆ ★\n");
printf(" ★ 1.功能权限设置 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 2.修改密码 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 3.返回主菜单 ☆\n");
printf(" ☆ ★\n");
printf(" ★ ------------------------------------------- ☆\n");
}
void anquan_1() // 1.功能权限设置
{ int a;
printf("\n\n");
printf(" | 1.录入教师信息 5.统计信息 |\n");
printf(" | 2.浏览所有教师信息 6. 按条件排序 |\n");
printf(" | 3.按条件查询信息 7.信息安全及权限管理 |\n");
printf(" | 4.修改教师信息 8.文件保存与读取 |\n");
printf(" ☆ 输入9返回上一级 ☆ \n");
while(1)
{
printf("--------------------------------------------------------------------------------------\n");
printf(" 请输入需要设置的功能序号(按9返回):");
scanf("%d",&a);
if(a==9) break;
printf("\n 权限设置为(0为关,1为开):");
scanf("%d",&anquan[a]);
printf(" ★ 设置成功 ★ \n");
getchar();
}
}
void xiugaimima() //修改密码
{ int t;
printf("初始秘密为:88888888\n");
printf(" 输入1返回菜单,输入其他建进行修改密码\n");
scanf("%d",&t);
if(t==1) {}
else { printf(" 请输入新密码:\n");
scanf("%d",&mima);
printf(" ★ 修改成功 ★ \n");
}
}
int anquangongneng(int x) //权限管理功能实现函数
{ int shurumima;
if(anquan[x]==1){
printf("请输入密码:");
scanf("%d",&shurumima);
if (shurumima==mima){ printf("密码正确");return 1; }
else { printf("密码错误"); return 0; }
}
else return 1;
}
void anquan_() //信息安全及权限管理主函数
{ int t;
anquancaidan();
while (1)
{
printf("\n ★请选择您的操作: ");
scanf("%d",&t);
if(t==3) break;
switch (t)
{
case 1: anquan_1();getchar(); break;
case 2: xiugaimima(); getchar(); break;
default: printf("\n ★操作有误!! ★\n"); getchar();
}
}
getchar();
system("cls");
caidan();
}
void paoxucaidan() //排序函数菜单
{
system("cls"); //清空屏幕
printf("\n\n\n ★按条件排序选项★ \n\n");
printf(" ★ ------------------------------------------- ☆\n");
printf(" ☆ ★\n");
printf(" ★ 1.按教师号排序 ☆\n");
printf(" ☆ 2.按年龄排序 ★\n");
printf(" ★ 3.按工资排序 ☆\n");
printf(" ☆ 4.返回主菜单 ★\n");
printf(" ★ ☆\n");
printf(" ☆ ★\n");
printf(" ★ ------------------------------------------- ☆\n");
}
void paixu_1()
//按条件排序---------1.按教师号排序
{ int i,j;
struct Teacher t[2];
for(i=0;i<renshu-1;i++)
{ for(j=0;j<renshu-1-i;j++){
if(Tc[j].Num>Tc[j+1].Num) { t[1]=Tc[j];Tc[j]=Tc[j+1];Tc[j+1]=t[1]; }
}
}
}
void paixu_2() //按条件排序--------- 2.按年龄排序
{ int i,j;
struct Teacher t[2];
for(i=0;i<renshu-1;i++)
{ for(j=0;j<renshu-1-i;j++){
if(Tc[j].Age>Tc[j+1].Age) { t[1]=Tc[j];Tc[j]=Tc[j+1];Tc[j+1]=t[1]; }
}
}
}
void paixu_3() //按条件排序--------- 3.按工资排序
{ int i,j;
struct Teacher t[2];
for(i=0;i<renshu-1;i++)
{ for(j=0;j<renshu-1-i;j++){
if(Tc[j].money>Tc[j+1].money) { t[1]=Tc[j];Tc[j]=Tc[j+1];Tc[j+1]=t[1]; }
}
}
}
void paixu() //排序功能主函数
{ int t,i;
paoxucaidan();
while (1)
{ printf("\n ★请选择您的操作: ");
scanf("%d",&t);
if (t==4) break;
switch (t)
{
case 1: paixu_1(); getchar();break;
case 2: paixu_2();getchar();break;
case 3: paixu_3();getchar();break;
default:printf("\n ★操作有误!! ★\n");getchar();
}
printf("---------------------------------------排序结果:---------------------------------------------------\n");
for (i=0;i<renshu;i++)
{
printf(" 第%d位教师信息:\n",i+1);
printf("教师号 姓名 性别 年龄 电话 工资 职称 课程名称 班级数\n");
printf("%5d%9s%5s%5d%11d%10d%9s%9s%9d\n",Tc[i].Num,Tc[i].Name,Tc[i].Sex,Tc[i].Age,Tc[i].dianhua,Tc[i].money,Tc[i].zhicheng,Tc[i].Course,Tc[i].ClassNum);
}
printf("\n---------------------------------☆所有信息已显示,按回车上一级☆-------------------------------\n");
getchar();
}
getchar();
system("cls");
caidan();
}
void tongjicaidan() //统计函数菜单
{
system("cls"); //清空屏幕
printf("\n\n\n ★统计信息选项★ \n\n");
printf(" ★ ------------------------------------------- ☆\n");
printf(" ☆ ★\n");
printf(" ★ 1.统计工资的平均值、最大最小值 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 2.统计年龄的平均值、最大最小值 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 4.返回主菜单 ☆\n");
printf(" ☆ ★\n");
printf(" ★ ------------------------------------------- ☆\n");
}
void tongji() //统计
{ int t,i=0,j;
float g=0;
tongjicaidan();
while (1)
{
printf("\n ★请选择您的操作: ");
scanf("%d",&t);
if(t==1)
{
int max=Tc[0].money,min=Tc[0].money;
for(i=0;i<renshu;i++)
{
g=g+Tc[i].money;
if(Tc[i].money>max) max=Tc[i].money;
if(Tc[i].money<min) min=Tc[i].money;
}
g=g/renshu;
printf("教师的工资的平均值:%7.1f 最大值:%d 最小值:%d",g,max,min);
printf("\n ★ 按4返回主菜单,请选择您的操作 ★\n");
getchar();
}
else if(t==2)
{
int max=Tc[0].Age,min=Tc[0].Age;
for(i=0;i<renshu;i++)
{
g=g+Tc[i].Age;
if(Tc[i].Age>max) max=Tc[i].Age;
if(Tc[i].Age<min) min=Tc[i].Age;
}
g=g/renshu;
printf("教师的年龄的平均值:%7.1f 最大值:%d 最小值:%d",g,max,min);
printf("\n ★ 按4返回主菜单,请选择您的操作 ★\n");
getchar();
}
else if(t==4) break;
else {printf("\n ★操作有误!! ★\n"); getchar();}
}
getchar();
system("cls");
caidan();
}
void chaxuncaidan() //按条件查询信息de 菜单
{ system("cls"); //清空屏幕
printf("\n\n ★按条件查询选项★ \n\n");
printf(" ★ ------------------------------------------- ☆\n");
printf(" ☆ ★\n");
printf(" ★ 1.按教师号查询 ☆\n");
printf(" ☆ 2.按姓名查询 ★\n");
printf(" ★ 3.按职称查询 ☆\n");
printf(" ☆ 4.返回主菜单 ★\n");
printf(" ★ ☆\n");
printf(" ☆ ★\n");
printf(" ★ ------------------------------------------- ☆\n");
}
void chaxun_1_() //按条件查询信息---------1.按教师号查询
{ int i,hao=0,b=0;
printf(" 请输入查询的教师号:");
scanf("%d",&hao);
printf("---------------------------------------查询结果:---------------------------------------------------\n") ;
for (i=0;i<renshu;i++)
{
if(Tc[i].Num==hao){
b=1;
printf("教师号 姓名 性别 年龄 电话 工资 职称 课程名称 班级数\n");
printf("%5d%9s%5s%5d%11d%10d%9s%9s%9d\n",Tc[i].Num,Tc[i].Name,Tc[i].Sex,Tc[i].Age,Tc[i].dianhua,Tc[i].money,Tc[i].zhicheng,Tc[i].Course,Tc[i].ClassNum);
}
}
if(b==0) {printf("\n ★无匹配教师!! ★\n"); }
}
void chaxun_2_() //按条件查询信息--------- 2.按姓名查询
{ int i,t=0;
char b[20];
printf(" 请输入查询的教师姓名:");
scanf("%s",&b);
printf("---------------------------------------查询结果:---------------------------------------------------\n") ;
for (i=0;i<renshu;i++)
{
if(strcmp(Tc[i].Name,b)==0) {
t=1;
printf("教师号 姓名 性别 年龄 电话 工资 职称 课程名称 班级数\n");
printf("%5d%9s%5s%5d%11d%10d%9s%9s%9d\n",Tc[i].Num,Tc[i].Name,Tc[i].Sex,Tc[i].Age,Tc[i].dianhua,Tc[i].money,Tc[i].zhicheng,Tc[i].Course,Tc[i].ClassNum);
}
}
if(t==0) {printf("\n ★无匹配教师!! ★\n"); }
}
void chaxun_3_() //按条件查询信息--------- 3.按职称查询
{ int i,t=0;
char b[10];
printf(" 请输入查询的教师职称:");
scanf("%s",&b);
printf("---------------------------------------查询结果:---------------------------------------------------\n") ;
for (i=0;i<renshu;i++)
{
if(strcmp(Tc[i].zhicheng,b)==0)
{
t=1;
printf("教师号 姓名 性别 年龄 电话 工资 职称 课程名称 班级数\n");
printf("%5d%9s%5s%5d%11d%10d%9s%9s%9d\n",Tc[i].Num,Tc[i].Name,Tc[i].Sex,Tc[i].Age,Tc[i].dianhua,Tc[i].money,Tc[i].zhicheng,Tc[i].Course,Tc[i].ClassNum);
}
}
if(t==0) {printf("\n ★无匹配教师!! ★\n"); }
}
void chaxun() //按条件查询信息--------功能主函数
{ int t;
chaxuncaidan();
while (1)
{
printf("\n ★请选择您的操作: ");
scanf("%d",&t);
if (t==4) break;
switch (t)
{
case 1: chaxun_1_(); getchar(); break;
case 2: chaxun_2_(); getchar(); break;
case 3: chaxun_3_(); getchar(); break;
case 4: break;
default: printf("\n ★操作有误!! ★\n"); getchar();
}
}
system("cls");
caidan();
}
void luru() //录入信息
{ int i,renshu2=0;
printf("请输入需要录入教师的人数:");
scanf("%d",&renshu2);
for (i=renshu;i<renshu+renshu2;i++)
{
printf("----------------------------------------------------------------------------------------------------\n");
printf("请输入教师 %d的\n教师号 姓名 性别 年龄 电话 工资 职称 课程名称 班级数:(空格分隔)\n",i+1);
scanf("%d%s%s%d%d%d%s%s%d",&Tc[i].Num,Tc[i].Name,Tc[i].Sex,&Tc[i].Age,&Tc[i].dianhua,&Tc[i].money,Tc[i].zhicheng,Tc[i].Course,&Tc[i].ClassNum);
}
renshu=renshu+renshu2;
printf("\n--------------------------------☆输入结束,按回车返回主菜单☆--------------------------------------\n");
getchar();
}
void chakan() //查看信息
{ int i;
for (i=0;i<renshu;i++)
{
printf("----------------------------------------------------------------------------------------------------\n");
printf("第%d位教师信息:\n",i+1);
printf("教师号 姓名 性别 年龄 电话 工资 职称 课程名称 班级数\n");
printf("%5d%9s%5s%5d%11d%10d%9s%9s%9d\n",Tc[i].Num,Tc[i].Name,Tc[i].Sex,Tc[i].Age,Tc[i].dianhua,Tc[i].money,Tc[i].zhicheng,Tc[i].Course,Tc[i].ClassNum);
}
printf("\n---------------------------------☆所有信息已显示,按回车返回主菜单☆-------------------------------\n");
getchar();
}
void xiugai() //修改信息
{ int i,t,j=-1;
while (1)
{
printf("请输入需要修改的教师号(输入0000结束修改):");
scanf("%d",&t);
if (t==0000) break;
for(i=0;i<renshu;i++)
{
if(Tc[i].Num==t)
{
j=i;break;
}
}
if (j>=0)
{
printf("请输入教师号为%d的\n 姓名 性别 年龄 电话 工资 职称 课程名称 班级数:(空格分隔)\n",t);
scanf("%s%s%d%d%d%s%s%d",Tc[j].Name,Tc[j].Sex,&Tc[j].Age,&Tc[j].dianhua,&Tc[j].money,Tc[j].zhicheng,Tc[j].Course,&Tc[j].ClassNum);
}
else printf("\n ★无匹配教师!! ★\n");
}
printf("\n-----------------------------------☆修改完毕,按回车返回主菜单☆-----------------------------------\n");
getchar();
}
void fanhui() //返回主菜单
{
system("cls");
caidan();
}
int main ()
{ int t,anquan3;
hello();
caidan();
while(1)
{
printf("\n ★ 请选择您的操作: ");
scanf("%d",&t);
printf("\n");
if(t==9)
{break;getchar(); }
switch (t)
{
case 1: anquan3=anquangongneng(1); if(anquan3==1) {luru(); getchar(); break;}
else break;
case 2: anquan3=anquangongneng(2); if(anquan3==1) {chakan(); getchar(); break;}
else break;
case 3: anquan3=anquangongneng(3); if(anquan3==1) {chaxun(); getchar(); break;}
else break;
case 4: anquan3=anquangongneng(4); if(anquan3==1) { xiugai(); getchar(); break;}
else break;
case 5: anquan3=anquangongneng(5); if(anquan3==1) {tongji(); getchar(); break; }
else break;
case 6: anquan3=anquangongneng(6);if (anquan3==1) {paixu(); getchar(); break; }
else break;
case 7: anquan3=anquangongneng(7); if(anquan3==1) {anquan_(); getchar(); break; }
else break;
case 8: anquan3=anquangongneng(8); if(anquan3==1) { wenjian(); getchar(); break; }
else break;
case 10: fanhui();
default: printf(" 操作有误!!!!\n"); getchar();
}
}
getchar();
jieshu();
return 0;
}
来源:CSDN
作者:GuanFuXinCSDN
链接:https://blog.csdn.net/GuanFuXinCSDN/article/details/104195232