1. 程式人生 > >linux下使用C語言實現簡易的學生資訊管理系統

linux下使用C語言實現簡易的學生資訊管理系統

該專案資料儲存方式使用的是動態陣列,所以需要用到動態陣列庫,具體庫檔案參考->我的動態陣列庫<-上的兩個檔案 ArrayLib.h 和 ArrayLib.c

學生管理系統的檔案有三個 main.c、stuSystem.h 和 stuSystem.c,以上五個檔案放在同一目錄下編譯

main.c

/***************************************************
 * 檔名:main.c
 * 檔案描述:學生管理系統框架 需要配合stuSystem.c
 * 			 stuSystem.h 以及動態陣列庫函式一起編譯
 * 編輯人:王廷雲
 * 編輯日期:2017-10-10
 * 修改日期:2018-2-10
****************************************************/
#include <stdio.h> #include <string.h> #include "stuSystem.h" #include "arrayLib.h" int main(void) { int index = 0; // 選單功能索引 int key; // 使用者按鍵輸入 FILE *fp; Array_t *ar; char *mainMenu[] = { // 選單選項 "1.註冊學生資訊", "2.查詢學生資訊", "3.刪除學生資訊", "4.退出管理系統", }; int NR = sizeof(
mainMenu)/sizeof(mainMenu[0]);// 選單選項數 /* 開啟檔案獲取資料 */ fp = fopen("./stuInfo.db", "r"); if (NULL == fp) // 檔案不存在則建立 { fp = fopen("./stuInfo.db", "w+"); } if (fread(&key, 1, 1, fp) != 1) // 如果檔案為空 { ar = initArray(sizeof(Student_t)); } else // 檔案不為空 { fclose(fp); // 先關閉開啟的檔案 ar = loadArrayFromFile
("./stuInfo.db"); // 從檔案中載入資料 if (ar == NULL) { fprintf(stderr,"load info failed.\n"); return -2; } } /* 初始化學生管理系統 */ initStuSysem(); while (1) { /* 顯示學生管理系統主選單 */ showMenu(mainMenu,NR,index); /* 獲取使用者輸入 */ key = getInput(); /* 根據使用者輸入進行功能選擇 */ switch (key) { /* 上移 */ case UP : index -= 1; if (index == -1) index = NR-1; break; /* 下移 */ case DOWN : index = (index+1)%NR; break; /* 功能確認 */ case ENTER : switch (index) { /* 註冊學生資訊 */ case 0: addStuInfo(ar); break; /* 查詢學生資訊 */ case 1: queryStuInfo(ar); break; /* 刪除學生資訊 */ case 2: deleteStuInfo(ar); break; /* 退出學生系統 */ case 3: exitStuSystem(ar); break; } break; /* 其它按鍵 */ default : continue; } } return 0; }

stuSystem.h

/********************************************
 * 檔名: stuSystem.h
 * 檔案描述: 學生管理系統工程標頭檔案,包含了該工程所有
 * 	      需要用到的列舉,結構體定義,方法函式的宣告
 * 編輯人:王廷雲
 * 編輯日期:2017-10-1
 * 修改日期:2018-1-10
********************************************/

#ifndef _STUSYSTEM_H_
#define _STUSYSTEM_H_

#include "arrayLib.h"

/* 使用者輸入按鍵列舉 */
enum Key_e {
	UP,		  /* 上鍵 */
	DOWN,	  /* 下鍵 */
	RIGHT,	  /* 右鍵 */
	LEFT,	  /* 左鍵 */
	ENTER,	  /* 確認鍵 */
	YES,	  /* 肯定鍵 */
	NO,		  /* 取消鍵 */
	QUIT,	  /* 退出鍵 */
	UNKNOW,	  /* 其它未知鍵 */
};

/* 學生結構體封裝 */
typedef struct {
	int   id;       // 學生學號:id
	char  name[10]; // 學生姓名
	float grade;	// 學生成績
} Student_t;

/* 初始化學生管理系統 */
void initStuSysem(void);

/* 顯示功能選擇選單 */
void showMenu(char *menu[], int NR, int index);

/* 註冊學成資訊 */
void addStuInfo(Array_t *ar);

/* 查詢學生資訊 */
void queryStuInfo(Array_t *ar);

/* 查詢所有學生資訊 */
void showAllStuInfo(Array_t *ar);

/* 根據學生學號顯示資訊 */
void showStuInfoById(Array_t *ar);

/* 根據學生姓名顯示資訊 */
void showStuInfoByName(Array_t *ar);

/* 根據學生成績顯示資訊 */
void showStuInfoByGrade(Array_t *ar);

/* 顯示學生資訊 */
void showStuInfo(void *data);

/* 退出顯示學生資訊介面 */
void exitStuInfo(void);

/* 用於回撥的比較函式 */
/* 1、根據學號 */
int compFunById(const void *data1, const void *data2);
/* 2、根據名字 */
int compFunByName(const void *data1, const void *data2);
/* 3、根據成績 */
int compFunByGrade(const void *data1, const void *data2);

/* 刪除學生資訊 */
void deleteStuInfo(Array_t *ar);

/* 刪除所有學生資訊 */
void deleteAllStu(Array_t *ar);

/* 根據學號刪除學生資訊 */
void deleteStuById(Array_t *ar);

/* 根據姓名刪除學生資訊 */
void deleteStuByName(Array_t *ar);

/* 根據成績刪除學生資訊 */
void deleteStuByGrade(Array_t *ar);



/* 獲取使用者輸入 */
int getInput(void);

/* 退出學生管理系統 */
void exitStuSystem(Array_t *ar);

#endif // _STUSYSTEM_H_

stySystem.c

/******************************************
 * 檔名: stuSystem.c
 * 檔案描述: 學生管理系統專案裡所有方法函式的實現
 * 編輯人:王廷雲
 * 編輯日期:2017-10-1
 * 修改日期:2018-1-10
******************************************/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "stuSystem.h"
#include "arrayLib.h"

/*
 * 函式名: initStuSysem
 * 函式功能: 對學生管理系統進行初始化
 * 引數: 無
 * 返回值: 無
*/
void initStuSysem(void)
{
	/* 對終端介面進行配置 */
	fprintf(stdout, "\033[2J");	// 清屏
	system("stty -icanon");		// 關閉緩衝
	system("stty -echo");		// 關閉回顯
	printf("\033[?25l");		// 隱藏滑鼠游標
	fflush(stdout);				// 重新整理
}

/*
 * 函式名: showMenu
 * 函式描述: 顯示學生管理系統功能選單
 * 引數: 1.選單內容 2.選單功能數目 3.功能索引值
 * 返回值: 無
*/
void showMenu(char *menu[], int NR, int index)
{
	int i;

	/* 螢幕設定 */
	for (i = 0; i < 100; i++)	// 清除螢幕
	{
		printf("\033[%d;1H\033[K", i);
	}
	printf("\033[1;1H");		// 定位到第一行第一列
	fflush(stdout);
	
	/* 列印選單 */
	for (i = 0; i < NR; i++)
	{
		if (i == index)
		{
			/* 顯示綠底黑字 */
			printf("\033[42;30m%s\033[0m\n",menu[i]);
		}
		else
		{
			/* 顯示白底黑字 */
			printf("\033[47;30m%s\033[0m\n",menu[i]);
		}
	}
}

/*
 * 函式名: getInput
 * 函式功能: 獲取使用者輸入
 * 引數: 無
 * 返回值: 返回使用者輸入對應值
*/
int getInput(void)
{
	int key;
	char ch;

	ch = getchar();
	if (ch == '\033' && getchar() == '[')   // 方向鍵
	{
		ch = getchar();
		switch (ch)
		{
			case 'A': key = UP;    break;
			case 'B': key = DOWN;  break;
			default : key = UNKNOW; break;
		}
	}
	else if (ch == '\n')                   // 確認鍵
	{
		key = ENTER;
	}
	else if (ch == 'y' && getchar() == '\n')
	{
		key = YES;
	}
	else if (ch == 'n' && getchar() == '\n')
	{
		key = NO;
	}
	else
	{
		key = UNKNOW;
	}

	return key;
}

/*
 * 函式名: addStuInfo
 * 函式功能: 註冊學生資訊選單功能
 * 引數: 儲存資料的陣列指標
 * 返回值: 無
*/
void addStuInfo(Array_t *ar)
{
	Student_t stu;
	int key;

	/* 開啟緩衝、顯示和滑鼠閃爍 */
	system("stty echo");
	system("stty icanon");
	printf("\033[?25h");
	fflush(stdout);
	
	/* 註冊學生 */
	printf("\n******\033[34m學生資訊註冊\033[0m*******\n");
	fprintf(stdout,"學生學號:\033[32m ");
	fscanf(stdin,"%d",&(stu.id));
	printf("\033[0m");
	fflush(stdout);

	fprintf(stdout,"學生姓名: \033[32m");
	fscanf(stdin,"%s",(stu.name));
	printf("\033[0m");
	fflush(stdout);

	fprintf(stdout,"學生成績: \033[32m");
	fscanf(stdin,"%f",&(stu.grade));
	printf("\033[0m");
	fflush(stdout);

	/* 確認是否錄入學生註冊資訊 */
	getchar(); /* 去除回車符 */
	while (1)
	{
		printf("\033[34m確認是否錄入學生註冊資訊(y/n):\033[0m");
		key = getInput();
		if (key == YES)     /* 確認註冊 */
		{
			int ret;
			ret = appendArrayTail(ar,&stu);
			if (ret != 0)
			{
				fprintf(stdout,"\033[31m錄入資訊失敗\033[0m\n");
			}
			else
			{
				fprintf(stdout,"\033[32m錄入資訊成功\033[0m\n");
			}
			break;
		}
		else if (key == NO) /* 取消註冊 */
		{
			printf("\033[32m錄入資訊取消\033[0m\n");
			break;
		}
		else  /* 輸入錯誤 */
		{
			printf("\033[31m輸入錯誤!\033[0m\n");
			while(getchar() != '\n'); /* 去掉多餘字元 */
			sleep(1);
		}
	}

	system("stty -echo");
	system("stty -icanon");
	printf("\033[?25l");
	fflush(stdout);

	sleep(1);  /* 稍等1秒 */
}

/*
 * 函式名: queryStuInfo
 * 函式功能: 查詢學生資訊子選單
 * 引數: 儲存資料的陣列指標
 * 返回值: 無
*/
void queryStuInfo(Array_t *ar)
{
	int index = 0;
	int i;
	int key;

	/* 如果沒有任何學生資訊則沒有必要進行下一步 */
	if (ar->n == 0)
	{
		printf("*****\033[31m沒有任何註冊學生資訊\033[0m****\n");
		sleep(1);
		return;
	}

	char *childMenu[] = {
		"**查詢所有**",
		"*按學號查詢*",
		"*按名字查詢*",
		"*按成績查詢*",
		"*返回主選單*",
	};
	
	/* 計算選單功能選項數 */
	int NR = sizeof(childMenu)/sizeof(childMenu[0]);
	
	/* 進入子選單 */
	while (1)
	{
		showMenu(childMenu,NR,index);
		key = getInput();
		/* 根據使用者輸入進行功能選擇 */
		switch (key)
		{
			/* 上移 */
			case UP    : index -= 1;
				     if (index == -1) index = NR-1; break;
			/* 下移 */
			case DOWN  : index = (index+1)%NR;   	break;
			/* 功能確認 */
			case ENTER :
				switch (index)
		     	{
				/* 顯示所有學生資訊 */
				case 0: showAllStuInfo(ar);     break;
				/* 根據學號顯示學生資訊 */
				case 1: showStuInfoById(ar);    break;
				/* 根據姓名顯示學生資訊 */
				case 2: showStuInfoByName(ar);  break;
				/* 根據成績顯示學生資訊 */
				case 3: showStuInfoByGrade(ar); break;
				/* 返回上一層選單 */
				case 4: return;
	   	    	} 									break;
			/* 其它按鍵 */
			case UNKNOW: continue;
		}

	}
}

/*
 * 函式名:showAllStuInfo
 * 函式功能:顯示所有學生資訊
 * 引數:學生資訊資料指標
 * 返回值:無
*/
void showAllStuInfo(Array_t *ar)
{
	printf("\n*********以下為全部學生資訊*********\n");
	travelArray(ar,showStuInfo);
	exitStuInfo();
}

/*
 * 函式名:exitStuInfo
 * 函式功能:退出顯示學生資訊介面
 * 引數:無
 * 返回值:無
*/
void exitStuInfo(void)
{
	int key;
	printf("***********\033[32m請按確認鍵返回\033[0m***********\n");

	/* 關緩衝回顯和滑鼠閃爍 */
	system("stty -echo");
	system("stty -icanon");
	printf("\033[?25l");
	fflush(stdout);

	while (1) /* 等待的確認鍵 */
	{
		key = getInput();
		if (key == ENTER)
		{
			return;
		}
	}
}

/*
 * 函式名:showStuInfoById
 * 函式功能:根據學號顯示學生資訊
 * 引數:學生資訊陣列
 * 返回值:無
*/
void showStuInfoById(Array_t *ar)
{
	void *temp;
	int id;

	/* 開啟回顯、緩衝和滑鼠閃爍 */
	system("stty echo");
	system("stty icanon");
	printf("\033[?25h");
	fflush(stdout);

	printf("請輸入學生學號:\033[32m");
	scanf("%d",&id);
	printf("\033[0m");
	fflush(stdout);
	temp = searchArrayOneByCond(ar,compFunById,&id);
	if (temp == NULL)
	{
		printf("***********\033[31m沒有該學生資訊\033[0m***********\n");
	}
	else
	{
		printf("***********以下為查詢結果***********\n");
		showStuInfo(temp);
	}
	getchar(); /* 去掉輸入id時所輸入的回車符 */
	exitStuInfo();
}

/*
 * 函式名:showStuInfoByName
 * 函式功能:根據姓名顯示學生資訊
 * 引數:學生資訊陣列
 * 返回值:無
*/
void showStuInfoByName(Array_t *ar)
{
	void *temp;
	char name[10];

	system("stty echo");
	system("stty icanon");
	printf("\033[?25h");
	fflush(stdout);

	printf("請輸入學生姓名:\033[32m");
	scanf("%s",name);
	printf("\033[0m");
	fflush(stdout);
	
	temp = searchArrayOneByCond(ar,compFunByName,name);
	if (temp == 
            
           

相關推薦

C語言實現班級學生成績管理系統

#include <stdio.h> #include <stdlib.h> #include <math.h> struct Student//學生結構 {     char Name[10];//姓名    

LinuxC語言實現獲取當前時間

C語言獲取當前時間 簡介 在工作中,經常涉及到獲取當前時間,用於寫日誌,基於此,今特意利用C語言寫一個獲取時間函式,用於後面用到時,能夠及時查到。獲取當前時間,要用到time.h中的time()和localtime()函式,二者具體介紹與使用,參見 ht

LinuxC語言實現C/S模式程式設計(附原始碼,執行截圖)

由標題可知,這篇部落格主要講如何用C語言實現一個C/S模式的程式。 主要功能:時間回送。 客戶機發出請求,伺服器響應時間,並返回伺服器時間,與客戶機進行同步。 廢話不多說,下面直接貼出原始碼。 程式碼如下: #include <stdio.h> #include

linuxC語言實現求CPU利用率

intr 21217894 119 18974 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 146350 0 647836 370 86696 3 146156 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

linuxC語言實現生產者消費者問題

問題描述: 緩衝區大小為N,生產者產生物品放到緩衝區,消費者將物品從緩衝區移走 互斥關係: 對緩衝區得訪問需要互斥,包括生產者和生產者之間、消費者和消費者之間、生產者和消費者之間。 同步關係:

Linuxc語言實現進度條

顏色的處理 要想把進度條加上顏色,我們只需要在需要顯示顏色的部分輸入顏色編號即可,但是要在最後用\033[0m關閉所有屬性,不然程式執行後會在執行後的後續文字中也變為我們之前所設定的顏色。 通過控制符即可設定我們需要的顏色: \033[30m– \033[

c#簡易學生資訊管理系統

在近期的學習中,我們學習了泛型及泛型集合的概念和使用,泛型是c#中的一個重要概念,為了鞏固我們學習的成果,我們可以使用一個例項來進行練習 題目及要求 要求使用Windows窗體應用程式,製作出如上圖的介面,並實現增刪改查的功能 StuInfo類的編寫 同往常一樣,在編寫窗體的程式碼前,我們需要先編

C++課設案例 學生資訊管理系統

#include <iostream> #include <string> #include <windows.h> #include <iostream> #include <fstream> #include <conio.h&g

JSP-簡易學生資訊管理系統

新建學生資訊資料庫 1.新增記錄模組 <%@ page contentType="text/html" pageEncoding="UTF-8"%> <html>

階段1:手把手教你做一個jsp servlet mysql實現學生資訊管理系統附帶視訊開發教程和完整原始碼

繼前段時間我出了四個階段的Java swing的學生資訊系統後,大家反響不錯,所以緊接著就開始錄製Java web的學生系統,還是跟以前一樣,分為四個階段,每個階段都是獨立完整的系統,第一階段實現的功能是基本的學生資訊管理功能,包括學生資訊的新增、修改、刪除、查詢,班級資訊的

c語言課程設計—學生成績管理系統

學生成績管理系統是比較適合初學者的。它涵蓋了c語言幾乎知識。對於學了c語言的人,把這個課程設計搞好(當然自己能設計出來是要有很好的基礎)。不管自己能不能夠完成,最重要的是能弄懂。參考其他資料,試著自己編寫是不錯的選擇。這個課程設計也是我參照資料,自己編寫的。自己適當地增加了

c++模擬實現一個學生成績管理系統

題目:用c++模擬實現一個學生成績的資訊管理系統,要求能新增、刪除、修改、檢視和儲存學生的資訊等功能 原始碼如下: #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;

c語言連結串列-學生成績管理系統

大學時候用連結串列寫的成績管理系統,可實現增刪查改的功能,程式碼如下 #include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<string.h> #d

C++課程設計:學生資訊管理系統

課程設計內容 1.)學生資訊的錄入:錄入新的學生的資訊; 2.)學生資訊的新增:新增新的學生的資訊; 3.) 學生資訊的刪除:刪除不需要的學生的資訊。 4.)學生資訊的查詢:查詢你需要的學生的資訊。 5.)學生資訊的修改:修改錯誤的學生的資訊。 6.)學生資訊的顯示:顯示所

C語言實現簡單的人員管理系統(續)

功能要求:使用C語言字元介面設計人員管理系統的選單介面;人員資訊有賬號、密碼、姓名、性別;要將人員資訊存入到“******.txt”中;還要能對人員資訊進行增、刪、查、改;查詢還要有模糊查詢的功能標頭檔案、函式的宣告以及一些全域性變數的宣告:#include <stdi

linux使用C語言實現簡易學生資訊管理系統

該專案資料儲存方式使用的是動態陣列,所以需要用到動態陣列庫,具體庫檔案參考->我的動態陣列庫<-上的兩個檔案 ArrayLib.h 和 ArrayLib.c 學生管理系統的檔案有三個 main.c、stuSystem.h 和 stuSystem.c,

linuxc語言利用iconv函式實現utf-8轉unicode

    由於專案中需要轉換原生unicode到ascii的功能,本來想的用的是linux或者windows自帶的寬位元組轉成窄位元組的函式,但由於本身使用了apr_iconv庫,所以直接使用庫函式來解決。     期間碰到了庫函式使用一直出錯的問題,一

C語言陣列實現學生資訊管理系統

概述   單純只用多個數組管理學生成績資訊,不使用結構體,該程式最主要的難點是依據學號或總成績對學生資訊進行排序,藉助了臨時陣列來標記排好序的下標。   執行結果如下:   輸入資料:   列印資料:   根據

Linux c語言ftp伺服器簡單實現

     這個程式轉載自http://aijiekj.blog.163.com/blog/static/12986678920112321853230/ 原來的程式沒有註釋,最近這段時間在學習網路程式設計這塊,就在網上找了個程式來學習,第一次找的程式下載下來後,編譯沒通過,

linuxC語言__FILE__,__LINE__,FUNCTION__實現程式碼跟蹤除錯

__FILE__,__LINE__,FUNCTION__實現程式碼跟蹤除錯(linux下C語言程式設計 )先看下簡單的初始程式碼:注意其編譯執行後的結果。 [email protected]:~/cpropram/2# cat global.h //標頭檔案 #