寒假是要用來彎道超車
終於迎來了寒假 ,作爲工科生,更甚者是學院裏課程最多考試最多的一個專業總算是度過了讓人掉頭髮的考試月,而回到家的我也知道自己的目標所在,所以也是沒有絲毫的放鬆,睡醒的第一天就將自己在考試階段中所編寫的學生信息管理系統做到了完善,現在就將其分享給大家!
自帶登陸系統的學生信息管理系統
以前對於學校不斷改善的學生信息管理系統,總是會在選課和考試報名的時候出現卡頓,並且直接癱瘓難以進入感到抱怨,今天自己在進行調試的時候就告訴自己,一定要爭取編出來一個較爲滿意的東西,並且能夠更好的將自己所學到的東西做到完善,因爲對於鏈表和動態的一些使用還不是非常的熟練,所以就沒有將其運用到這裏面,避免產生一些不好的效果,廢話不多說,直接給大家開整!
程序
1. 做一個信息管理系統,首要的就是它的界面設計
2. 登陸程序
3. 主菜單界面
4. 功能的實現
整體說來一個完整的教務系統就包括了這幾個方面的存在,我們應該儘可能地在自己編寫程序之前,在紙上或者說是在畫圖板上畫出來我們所需要的內容和想要實現的一些想法,之後用文字來描述,最終將文字轉換爲相應的代碼即可。
***前面的準備工作,所需要用到的數據進行相應的定義和頭文件的使用***
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <string.h>
#define N 10//定義數據總數爲10,爲了測試方便我們可以將其設置爲3進行測試
enum Sex//枚舉性別的兩種可能
{
male,female
};
struct Student{
char name[20];
int num;//100-109
char sex[10];
int Math;//100分制
}stu[N] = { { "王一", 100, "male", 100 },
{"孫二",101,"female",56},
{"張三",102,"male",85} }; //羅列的測試數據,在自己使用的過程中可以將其刪除掉 之後在界面之中重新輸入
void PrintUi(){//登陸界面函數
printf("\t╔══════════════════════════════════════════════════════════════╗\n");
printf("\t║ ║\n");
printf("\t║ ║\n");
printf("\t║ ._______________________. ║\n");
printf("\t║ | _____________________ | ║\n");
printf("\t║ | I I | ║\n");
printf("\t║ | I 教學管理系統 I | ║\n");
printf("\t║ | I I | ║\n");
printf("\t║ | I___________________I | ║\n");
printf("\t║ !_______________________! ║\n");
printf("\t║ ._[__________]_. ║\n");
printf("\t║ .___|_______________|___. ║\n");
printf("\t║ |::: ____ | ║\n");
printf("\t║ | 密碼: | ║\n");
printf("\t║ !_____________________! ║\n");
printf("\t║ ║\n");
printf("\t║ ║\n");
printf("\t║ ║\n");
printf("\t║ ║\n");
printf("\t╚══════════════════════════════════════════════════════════════╝\n");
}
這個登陸界面其實是我在編寫的過程中突然想到的,記得自己以前編輯過一個專門的登陸函數,所以就將其引用到了這裏,將完整的一個登陸函數鏈接附在後面
int Land(){//登陸函數
printf("請輸入您的登陸密碼:");
int Psssword;//初始化密碼數據
int a = 7777777;//設置的密碼
for (int n = 1; n <= 3; n++){
scanf("%d", &Psssword);
if (Psssword==a){
system("cls");
printf("您的密碼輸入正確!\n");
printf("正在登陸,請稍等…………\n");
Sleep(4000);//登陸延時程序,產生短暫的登陸狀態
system("cls");
return 1;//登陸成功則返回1
}
else{
printf("您的密碼輸入錯誤,請您重新輸入!\n",n);
}
if (n == 3){//登陸次數爲3時 機會用盡
printf("您的機會已用盡!\n");
return -1;//機會用盡表示登陸失敗,則返回-1
}
}
return 0;
}
void PrintMode(){//系統菜單頁面
printf("**************************************\n");
printf("**************************************\n");
printf("****** ********\n");
printf("****** 教 學 系 統 ********\n");
printf("****** ********\n");
printf("****** ********\n");
printf("****** 1. 錄 入 信 息 ********\n");
printf("****** 2. 輸 出 信 息 ********\n");
printf("****** 3. 查 詢 信 息 ********\n");
printf("****** 4. 成 績 排 名 ********\n");
printf("****** 0. 退 出 系 統 ********\n");
printf("****** ********\n");
printf("****** ********\n");
printf("**************************************\n");
printf("**************************************\n");
}
int Welcome()
{//歡迎函數
PrintUi(1);//打印主界面函數
int i = Land(1);//登陸界面的調用
if (i == 1){//當登陸成功則打開菜單頁面
PrintMode(1);//打印菜單界面
return 0;
}
else
{
return -1;
}
}
int Search(int i)//查詢函數,爲了後面輸出特定的信息而進行學號的查找
{
int n;
for (n = 0; n < N; n++){
if (i == stu[n].num){//如果所輸入的學號和系統內的學號相等,則返回此位的序號
return n;
}
}
return -1;//如果未找到,則返回-1
}
void InPut()
{//輸入函數
int i;
printf("提示:姓名 學號(100-109) 性別(male,female) 數學成績(100分制)\n");
printf("請輸入全部的學生信息:\n");
for (i = 0; i < N; i++){
scanf("%s%d%s%f", stu[i].name, &stu[i].num, stu[i].sex, &stu[i].Math);
}
}
void SpecialPut(){
int i,c;
printf("請輸入您要查找的學號(100-109):");
while (1){
scanf("%d", &i);
c = Search(i);//調用查找函數來進行學號的查找
if ( c== -1){//若不屬於系統中的學號,則返回-1,表示輸入有誤
printf("您的輸入有誤!\n");
continue;
}
printf("姓名:%s\n學號:%d\n性別:%s\n數學:%d\n",stu[c].name, stu[c].num, stu[c].sex, stu[c].Math);
break;
}
}
void OutPut(){
int i;
printf("----------------------------------------------\n");
printf("|姓名: |學號: |性別: |數學: |\n");
for (i = 0; i < N; i++){
printf("|%s |%d |%s |%d |\n", stu[i].name, stu[i].num, stu[i].sex,stu[i].Math);
}
printf("----------------------------------------------\n");
}
void Rand(){//在排序的這個函數之中,我們也可以增添英語和語文成績,其方式是一樣的
int i, j, num,math;//設置轉換的中介量
char name[20],sex[10];
for (i = 0; i < N - 1; i++){
for (j = i+1; j < N; j++){
if (stu[j].Math>stu[i].Math){//以冒泡法來進行排序
math = stu[j].Math;//將數學成績進行調換
stu[j].Math = stu[i].Math;
stu[i].Math = math;
strcpy(name, stu[j].name);//對於字符串不能夠進行直接轉換,因爲指針所指向的只是字符串的首地址
strcpy(stu[j].name, stu[i].name);//因此使用strcpy函數來進行字符串的複製
strcpy(stu[i].name, name);
num = stu[j].num;//和成績類似
stu[j].num = stu[i].num;
stu[i].num = num;
strcpy(sex , stu[j].sex);//性別和名字類似
strcpy(stu[j].sex, stu[i].sex);
strcpy(stu[i].sex, sex);
}
}
}
printf("成績的排名爲:\n");
OutPut();
}
int main(){
int c = Welcome(1);
if (c == 0)
{
int choice;
printf("請輸入您要進行的操作序號:");
scanf("%d", &choice);
switch (choice){
case 1: InPut();//信息輸入
break;
case 2: OutPut();//信息全部輸入
break;
case 3: SpecialPut();//按學號查找並輸出此學生的信息
break;
case 4: Rand();//科目成績排名
break;
case 0://退出系統
system("cls");
printf("您選擇退出系統!");
break;
}
}
system("pause");
return 0;
}