c語言設計 教師信息管理系統 含源碼及說明
另有python版本 :
Python基礎知識詳解(十)小結,用python實現教師信息管理系統
基本功能
系統的基本功能
- 文件保存與讀取
- 信息安全及權限管理
- 教師信息的錄入
- 教師信息的瀏覽
- 教師信息的修改
- 按條件查詢信息
- 統計信息
- 按條件排序
詳細設計
詳細設計
詳細設計是弄清楚用戶對目標系統數據處理功能提出的要求,根據系統目標和數據需求並與用戶充分討論後做出的歸納。本系統的功能需求可能歸納爲:
- 文件保存與讀取
文件保存是可以將用戶錄入的教師數據保存到一個程序自行創建的一個文件裏,用戶關閉程序,再次使用本系統時可以直接訪問並提取文件中的數據。
信息安全及權限管理
信息安全功能可由用戶自行設定需要權限的功能模塊,功能類似與手機APP應用鎖可選擇性地設定需要密碼的應用程序,很好的保障了用戶信息的安全,又方便第三方的訪問。 - 教師信息的錄入
錄入方面要方便用戶把各種數據錄入到系統將要建立的新的文件文本中,這些數據包含教師的編號、姓名、性別、年齡、電話、工資、職稱、課程名稱、班級數。當用戶再次錄入數據是會自動插入到上一次錄入的數據的後面,不會覆蓋掉上次錄入的數據。 - 教師信息的瀏覽
按上一次排序的順序或用戶錄入的順序輸出所有教師信息數據,這些數據包含教師的編號、姓名、性別、年齡、電話、工資、職稱、課程名稱、班級數。 - 教師信息的修改
用戶能夠根據教師號修改數據中的教師姓名、性別、年齡、電話、工資、職稱、課程名稱、班級數等信息數據。 - 按條件查詢信息
用戶可以通過教師號、姓名、職稱查詢到教師完整的信息,用戶可以更加方便、快捷地找到自己所需要的信息。 - 統計信息
用戶可以利用統計功能瞭解到教師的工資或年齡平均水平及整體水平
7.按條件排序
用戶可以通過條件排序直觀的讀取到教師的工作水平差異。
功能說明
源代碼中已經改頁面背景爲藍綠色
- 編譯運行代碼,進入教師信息管理系統界面並按回車鍵即可進入教師信息管理系統菜單選項界面。如下圖
按回車
在主菜單中輸入序號1,回車,輸入錄入人數,即可錄入教師信息。錄入完成後按操作提示返回菜單頁面。如圖
在主菜單中輸入序號2回車即可瀏覽錄入的信息
在主菜單中輸入序號3回車進入按條件查詢界面,輸入查詢方式的序號即可的查詢對應教師信息。
在主菜單中輸入序號4回車,進入修改信息界面。輸入相應的教師號即可修改教師信息。如圖
在主菜單中輸入序號5進入統計功能界面,輸入要統計選項的序號回車.
在主菜單中輸入序號6進入條件排序選項功能界面,輸入排序方式的序號並回車即可獲得排序結果。如下
在主菜單中輸入序號7進入信息安全及權限管理功能界面,按相應要求輸入相應的序號即可設置權限或修改密碼
在主菜單中輸入序號8進入信息保存與讀取界面,輸入執行的操作序號設置成功後可在文件中查看。如圖
源代碼
持續更新c 語言 arduino 樹莓派 python 等等
接到有幫助的話 求點贊👍 求關注❤️ 求分享👥
有問題可以評論
點關注,不迷路
如果有任何錯誤,如何建議,請批評指教,不勝感激 !
#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;
}