1. 程式人生 > >C語言實現一個列表式的學生資訊管理系統(完善)

C語言實現一個列表式的學生資訊管理系統(完善)

http://blog.csdn.net/morixinguan/article/details/77489633

上節,我們實現了學生資訊管理系統的大多數功能,但還有兩個功能沒有實現,就是學生資訊修改還有學生資訊刪除了。當然,程式中依然存在諸多的BUG,比如,scanfgetchar函式就是一對冤家,如果用了scanf,再呼叫getchar,就會出現所謂的輸入緩衝區問題,導致程式一閃而過。然而解決這種問題的唯一方法就是使用fflush函式,對輸入緩衝區,輸出緩衝區,出錯緩衝區進行重新整理。下面是對多數明顯的程式BUG進行修復,以及添加了刪除和修改的功能。但可能存在一些未發覺的BUG,需要進行程式的壓力測試才能得知,但如圖所示的基本功能已經完全可以正常工作了。大笑

大笑

該專案實現的效果如下:


那麼這裡面用到了window上的那些知識點才可以做到這樣的效果呢?上節博文已經給大家介紹了兩個部落格。當然大家也可以去搜索這本pdf教程:

叫做C/C++控制檯介面程式設計,可以學習下,寫出炫酷的控制檯程式。


接下來,我們來看下程式碼的具體實現:

/*
	Copyright (C) 2007 The Windows console C Open Source Project 
	AUTHOR:  Y.X.YANG
	date:	 2017年8月23日
	version: 2.0
	C runtime environment : Windows DevC++ And all Windows development Software
*/
#include <stdio.h>
#include <Windows.h>
#include <conio.h>
#include <stdlib.h>
#include <unistd.h>
#include <tchar.h>
#define   NR(x)   (sizeof(x)/sizeof(x[0]+0))
#define  TITLE  "學生資訊管理系統"
#define  AUTHOR "作者:楊源鑫"
#define  DATE   "日期:2017年8月23日 version2"
#define  SIZE   100
//在終端上列印資訊
#define Print_Info_To_console(str,hOut,pos,x,y,color_type) \
	SetConsoleTextAttribute(hOut, color_type); 	\
	pos.X = x;									\
	pos.Y = y ;									\
	SetConsoleCursorPosition(hOut,pos);    		\
	printf("%s",str);							

//清屏
#define ClearScreen() \
	    system("cls");

	
//定義列舉Keyboard的鍵值資料 
enum 
{
	UP = 72,
	DOWN = 80 ,
	LEFT = 75 ,
	RIGHT = 77 ,
	ENTER = 13 ,
	ESC = 27 ,
};

//儲存學生資訊的結構體
struct student
{
	char name[20] ; //名字
	int  id ; 	    //學生ID
	float score ;   //分數
};



//定義要顯示的選單 
char *menu[] = 
{
	"*學生資訊新增*",
	"*學生資訊查詢*",
	"*學生資訊列印*",
	"*學生資訊修改*",
	"*學生資訊刪除*",
	"*學生資訊儲存*",
	"*學生資訊匯入*",
	"*    退出    *",
};


//視窗初始化
void HANDLE_init(HANDLE hOut);
//顯示選單 
void showmenu(HANDLE hOut ,char **menu , int size , int index) ;
//獲取使用者輸入 
int  get_userinput(int *index , int size) ;
//學生資訊新增
void stu_add(HANDLE hOut);
//學生資訊列印
void stu_show(HANDLE hOut);
//學生資訊查詢
void stu_search(HANDLE hOut);
//學生資訊儲存
void stu_save(HANDLE hOut);
//學生資訊匯入
void stu_load(HANDLE hOut);
//學生資訊修改
void stu_modefi(HANDLE hOut);
//學生資訊刪除
void stu_delete(HANDLE hOut);


//學生的個數
int stucount ; 
//定義一個數組,用於儲存學生資訊  
struct student array[SIZE] = {0}; 
//定義設定游標結構體變數
CONSOLE_CURSOR_INFO cci; 
//定義預設的座標位置  	
COORD pos = {0,0};


int main()
{
    int i;
    int ret ;
    int index = 0 ;
    HANDLE hOut;
	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	HANDLE_init(hOut);
    while(1)
    {
    	showmenu(hOut , menu , NR(menu) , index);
		ret = get_userinput(&index , NR(menu));
		if(ret == ESC)
			break ;
		if(ret == ENTER)
		{
			switch(index)
			{
				case 0:  stu_add(hOut) ; break ;  	//學生資訊新增
				case 1:  stu_search(hOut);break ;   //學生資訊查詢
				case 2:  stu_show(hOut); break ;  	//學生資訊列印
				case 3:  stu_modefi(hOut); break ;  //學生資訊修改
				case 4:  stu_delete(hOut); break ;  //學生資訊刪除
				case 5:  stu_save(hOut); break ; 	//學生資訊儲存
				case 6:  stu_load(hOut); break ;    //學生資訊匯入
				case 7:  ClearScreen();return 0 ;   //退出學生資訊管理系統
			}
		}
	}
	//關閉視窗控制代碼
	CloseHandle(hOut);
    return 0;
}

//視窗初始化
void HANDLE_init(HANDLE hOut)
{
	SetConsoleTitleA(TITLE);
	//獲取當前的控制代碼---設定為標準輸出控制代碼 
    //獲取游標資訊
    GetConsoleCursorInfo(hOut, &cci); 
	//設定游標大小   
    cci.dwSize = 1; 
	//設定游標不可見 FALSE   
    cci.bVisible =  0; 
    //設定(應用)游標資訊
    SetConsoleCursorInfo(hOut, &cci); 
}

//選單初始化
void showmenu(HANDLE hOut ,char **menu , int size , int index)
{
	int i ; 
	ClearScreen();	
	Print_Info_To_console(TITLE,hOut,pos,30,0,FOREGROUND_GREEN | 0x8);
	Print_Info_To_console(AUTHOR,hOut,pos,32,1,FOREGROUND_GREEN | 0x8);
	Print_Info_To_console(DATE,hOut,pos,25,2,FOREGROUND_GREEN | 0x8);
	Print_Info_To_console("請按↑↓←→按鍵選擇,並用Enter按鍵確認",hOut,pos,20,20,FOREGROUND_GREEN | 0x8);
	for(i = 0 ; i < size ; i++)
	{
		//如果i==index表示在當前選項的位置,預設初始化顯示是第一項,顯示為紅色,
		//當按下上下按鍵選擇的時候,游標會移動,也就看到了列表選擇的現象 
		if(i == index){
			Print_Info_To_console(menu[i],hOut,pos,30,i+5,FOREGROUND_RED | 0x8);
		}
		else{
			Print_Info_To_console(menu[i],hOut,pos,30,i+5,FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | 0x8);			
		}
	}
	//重新整理標準輸出緩衝區 
	fflush(stdout);
}

//獲取使用者輸入的介面 
int  get_userinput(int *index , int size)
{
	int ch ;
	fflush(stdin);
	ch = getch();
	switch(ch)
	{
		//上 
		//如果選擇上,那麼游標向上移動 
		case UP : if(*index > 0)  *index -= 1 ;  break; 
		//下 
		//如果選擇下,那麼游標向下移動 
		case DOWN :if(*index < size -1)  *index += 1 ;  break;
		//左 
		case LEFT: 
		case 97:return 0 ;
		//右 
		case RIGHT:return 0 ;
		//回車 
		case ENTER: return ENTER ;
		//ESC
		case ESC: return ESC ;
	}
	return 0 ;
}

//學生資訊新增
void stu_add(HANDLE hOut)
{
	ClearScreen();	
	if(stucount >= SIZE){
		Print_Info_To_console("學生資訊已經滿了\n",hOut,pos,30,0,FOREGROUND_RED | 0x8);
	}
	Print_Info_To_console("學生資訊新增\n",hOut,pos,30,0,FOREGROUND_GREEN | 0x8);
	printf("學生姓名:");
	scanf("%s" , array[stucount].name);
	printf("\n學生ID:");
	scanf("%d" , &(array[stucount].id));
	printf("\n學生成績:");
	scanf("%f" , &(array[stucount].score));
	stucount++ ; 
	 //清掉輸入緩衝區中的\n
	getchar();  
	fflush(NULL);
}

//學生資訊列印
void stu_show(HANDLE hOut)
{
	int i ; 
	ClearScreen();	
	fflush(stdin);
	fflush(stdout);
	Print_Info_To_console("學生資訊列印\n",hOut,pos,30,0,FOREGROUND_GREEN | 0x8);
	for(i = 0 ; i < stucount ; i++)
	{
		SetConsoleTextAttribute(hOut, FOREGROUND_RED| 0x8); 
		pos.X = 1;
		pos.Y = i+4 ;
		SetConsoleCursorPosition(hOut,pos); 
		printf("ID:%2d ",array[i].id);
		printf("姓名:%s ",array[i].name);
		printf("分數:%4.1f ",array[i].score);
	}
	fflush(stdout);
	Print_Info_To_console("Please press any key to continue ... \n",hOut,pos,0,20,FOREGROUND_GREEN | 0x8);
	getchar(); 
}
//查詢ID
static void search_id(HANDLE hOut,int id)
{
	ClearScreen();	
	Print_Info_To_console("查詢到學生的資訊\n",hOut,pos,30,0,FOREGROUND_GREEN | 0x8);
	fflush(stdout);
	int i ,j ,flag = 0; 
	for(i = 0 , j = 0 ; i < stucount ; i++)
	{
		if(array[i].id == id)
		{
			flag = 1 ;
			SetConsoleTextAttribute(hOut, FOREGROUND_RED| 0x8); 
			pos.X = 1;
			pos.Y = j+4 ;
			SetConsoleCursorPosition(hOut,pos); 
			printf("ID:%2d ",array[i].id);
			printf("姓名:%s ",array[i].name);
			printf("分數:%f ",array[i].score);
			j++ ; 
		}
	}
	if(flag == 0)
	{
		Print_Info_To_console("找不到該學生的ID,請按任意按鍵返回主選單!\n",hOut,pos,0,20,FOREGROUND_RED | 0x8);
		getchar();
	}
	if(flag == 1)
	{
		fflush(stdout);
		Print_Info_To_console("Please press any key to continue ... \n",hOut,pos,0,20,FOREGROUND_GREEN | 0x8);
		getchar(); 
	}
}
//查詢姓名
static void search_name(HANDLE hOut,const char *name)
{
	ClearScreen();	
	Print_Info_To_console("查詢到學生的資訊\n",hOut,pos,30,0,FOREGROUND_GREEN | 0x8);
	fflush(stdout);
	int i , j , flag = 0; 
	for(i = 0 , j = 0; i < stucount ; i++)
	{
		if(strcmp(array[i].name , name) == 0)
		{
			flag = 1 ;
			SetConsoleTextAttribute(hOut, FOREGROUND_RED| 0x8); 
			pos.X = 1;
			pos.Y = j+4 ;
			SetConsoleCursorPosition(hOut,pos); 
			printf("ID:%2d ",array[i].id);
			printf("姓名:%s ",array[i].name);
			printf("分數:%f ",array[i].score);
			j++ ; 
		}
	}
	if(flag == 0)
	{
		Print_Info_To_console("找不到該學生的姓名,請按任意按鍵返回主選單!\n",hOut,pos,0,20,FOREGROUND_RED | 0x8);
		getchar();
	}
	if(flag == 1)
	{
		fflush(stdout);
		Print_Info_To_console("Please press any key to continue ... \n",hOut,pos,0,20,FOREGROUND_GREEN | 0x8);
		getchar();
	}
}

//學生資訊查詢
void stu_search(HANDLE hOut)
{
	char ch ; 
	int id ; 
	char name[30] ; 
repeat:
	ClearScreen();	
	Print_Info_To_console("學生資訊查詢\n",hOut,pos,30,0,FOREGROUND_GREEN | 0x8);
	Print_Info_To_console("請選擇按什麼方式查詢學生資訊 :\n",hOut,pos,20,0,FOREGROUND_GREEN | 0x8);
	Print_Info_To_console("			1.ID \n",hOut,pos,10,1,FOREGROUND_GREEN | 0x8);
	Print_Info_To_console("			2.NAME \n",hOut,pos,10,2,FOREGROUND_GREEN | 0x8);
	fflush(stdout);
	//獲取要輸入的資訊
	ch = getch();  
	if(ch == '1')
	{
		ClearScreen();	
		Print_Info_To_console("請輸入學生ID: ",hOut,pos,0,1,FOREGROUND_GREEN | 0x8);
		fflush(stdout);
		scanf("%d" , &id);
		getchar();
		if(id < 0)
		{
			getchar();
			Print_Info_To_console("請入ID有誤,請按任意鍵重新選擇輸入\n",hOut,pos,0,20,FOREGROUND_RED | 0x8);
			getchar();  
			goto repeat;
		}
		search_id(hOut,id);
	}
	if(ch == '2')
	{
		printf("請輸入學生NAME: ");
		fflush(stdout);
		scanf("%s" , name);
		getchar();
		search_name(hOut,name);
	}
	if(ch != '1' && ch != '2')
	{
		goto repeat;
	}
}

//學生資訊儲存
void stu_save(HANDLE hOut)
{
	FILE *filp = NULL ; 
	char ch ; 
	char Path[30] ; 
repeat1:
	ClearScreen();	
	Print_Info_To_console("學生資訊儲存\n",hOut,pos,30,0,FOREGROUND_GREEN | 0x8);
	Print_Info_To_console("請選擇按什麼方式儲存學生資訊 :\n",hOut,pos,20,0,FOREGROUND_GREEN | 0x8);
	Print_Info_To_console("			1.追加 \n",hOut,pos,10,1,FOREGROUND_GREEN | 0x8);
	Print_Info_To_console("			2.覆蓋 \n",hOut,pos,10,2,FOREGROUND_GREEN | 0x8);
	fflush(stdout);
	ch = getch();  
	ClearScreen();	
	Print_Info_To_console("請輸入儲存檔名:\n",hOut,pos,0,1,FOREGROUND_GREEN | 0x8);
	scanf("%s" , Path);
	getchar();
	if(ch == '1')
	{
		filp = fopen(Path , "a+");
		if(NULL == filp)
		{
			Print_Info_To_console("檔案開啟失敗 \n",hOut,pos,0,20,FOREGROUND_RED | 0x8);
			Print_Info_To_console("請按任意鍵重新選擇輸入 \n",hOut,pos,0,21,FOREGROUND_RED | 0x8);
			getchar(); 
			goto  repeat1;
		}
	}
	if(ch == '2')
	{
		filp = fopen(Path , "w+");
		if(NULL == filp)
		{
			Print_Info_To_console("檔案開啟失敗 \n",hOut,pos,0,20,FOREGROUND_RED | 0x8);
			SetConsoleTextAttribute(hOut, FOREGROUND_RED | 0x8); 
			Print_Info_To_console("請按任意鍵重新選擇輸入 \n",hOut,pos,0,21,FOREGROUND_RED | 0x8);
			getchar(); 
			goto  repeat1;
		}
	}
	if(ch != '1' && ch != '2')
	{
		goto repeat1;
	}

	int i ; 
	for(i = 0 ; i < stucount ; i++)
	{
		fwrite(&(array[i]) , sizeof(struct student) , 1 , filp);
	}
	fclose(filp);
	Print_Info_To_console("學生資訊儲存完畢\n",hOut,pos,0,20,FOREGROUND_GREEN | 0x8);
	sleep(1) ; 
}
//學生資訊裝載
void stu_load(HANDLE hOut)
{
	int i ; 
	FILE *filp = NULL ; 
	char Path[30] ; 
	ClearScreen();	
	Print_Info_To_console("學生資訊載入\n",hOut,pos,30,0,FOREGROUND_GREEN | 0x8);
	Print_Info_To_console("請輸入匯入檔名 :\n",hOut,pos,0,1,FOREGROUND_GREEN | 0x8);
	scanf("%s" , Path);
	filp = fopen(Path , "r");
	if(NULL == filp)
	{
		Print_Info_To_console("檔案開啟失敗 \n",hOut,pos,0,20,FOREGROUND_RED | 0x8);
		SetConsoleTextAttribute(hOut, FOREGROUND_RED | 0x8); 
		Print_Info_To_console("請按任意鍵退出 \n",hOut,pos,0,21,FOREGROUND_RED | 0x8);
		fflush(stdin);
		fflush(stdout); 
		getchar();
		return ;
	}
	char buffer[1024] ; 
	char *p = NULL ; 
	int ret ; 
	while(1)
	{
		ret = fread(&(array[stucount]) , sizeof(struct student) , 1 , filp);
		if(ret != 1)
			break;
		stucount++ ; 
	}
	fclose(filp);
	ClearScreen();	
	Print_Info_To_console("學生資訊匯入完畢\n",hOut,pos,0,20,FOREGROUND_GREEN | 0x8);
	sleep(1);
}
//學生資訊修改
void stu_modefi(HANDLE hOut)
{
	int id ; 
	int flag = 0 ;
	int location ;
	char ch ;
	replay:
	ClearScreen();	
	Print_Info_To_console(" 學生資訊修改\n",hOut,pos,30,0,FOREGROUND_GREEN | 0x8);
	Print_Info_To_console("請輸入學生ID: ",hOut,pos,0,1,FOREGROUND_GREEN | 0x8);
	fflush(stdout);
	scanf("%d" , &id);
	int i ; 
	for(i = 0 ; i < stucount ; i++)
	{
		//如果ID匹配,也就是查詢到這個學生的資訊了
		if(array[i].id == id)
		{
			flag = 1 ;
			//儲存當前陣列的位置
			location = i ;
			break ;
		}
	}
	//判斷是否匹配成功的標誌
	if(flag == 1){
		flag = 0 ;
		//列印該學生的資訊
		ClearScreen();	
		Print_Info_To_console("找到該學生的資訊如下:\n",hOut,pos,15,0,FOREGROUND_GREEN | 0x8);
		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN| 0x8); 
		pos.X = 0;
		pos.Y = 1 ;
		SetConsoleCursorPosition(hOut,pos); 
		printf("ID:%2d ",array[i].id);
		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN| 0x8); 
		pos.X = 0;
		pos.Y = 2 ;
		SetConsoleCursorPosition(hOut,pos); 
		printf("姓名:%s ",array[i].name);
		SetConsoleTextAttribute(hOut, FOREGROUND_GREEN| 0x8); 
		pos.X = 0;
		pos.Y = 3 ;
		SetConsoleCursorPosition(hOut,pos); 
		printf("分數:%f ",array[i].score);
	}
	else
	{
		Print_Info_To_console("請入ID有誤,請按任意鍵重新選擇輸入\n",hOut,pos,0,1,FOREGROUND_RED | 0x8);
		fflush(stdin);
		getchar();
		goto replay ;
	}
	//詢問是否需要修改
	Print_Info_To_console("請問是否需要修改該學生的資訊?按1確定,按2退回到主選單\n",hOut,pos,0,4,FOREGROUND_GREEN | 0x8);
	//重新整理輸出緩衝區
	fflush(stdout);
	//重新整理輸入緩衝區
	fflush(stdin);
	ch = getch();
	ClearScreen();	
	if(ch == '1')
	{
		//是否需要修改學生的ID?
		Print_Info_To_console("是否需要修改學生的ID?按1確定,按2不需要\n",hOut,pos,0,1,FOREGROUND_GREEN | 0x8);
		fflush(stdout);
		fflush(stdin);
		ch = getch();
		if(ch == '1')
		{
			ClearScreen();	
			Print_Info_To_console("修改學生ID為:",hOut,pos,0,1,FOREGROUND_GREEN | 0x8);
			scanf("%d" , &(array[location].id));
			Print_Info_To_console("修改學生ID成功,請按任意鍵返回主選單\n",hOut,pos,0,2,FOREGROUND_GREEN | 0x8);
			sleep(2);
			fflush(stdin);
			getchar();
			return ;
		}
		if(ch == '2')
		{
			//是否需要修改學生的姓名
			ClearScreen();	
			Print_Info_To_console("是否需要修改學生的姓名?按1確定,按2不需要\n",hOut,pos,0,1,FOREGROUND_GREEN | 0x8);
			fflush(stdout);
			fflush(stdin);
			ch = getch();
			if(ch == '1')
			{
				ClearScreen();	
				Print_Info_To_console("修改學生姓名為:",hOut,pos,0,1,FOREGROUND_GREEN | 0x8);
				scanf("%s" , array[location].name);
				Print_Info_To_console("修改學生姓名成功,請按任意鍵返回主選單\n",hOut,pos,0,2,FOREGROUND_GREEN | 0x8);
				sleep(1);
				fflush(stdin);
				getchar();
				return ;
			}
			if(ch == '2')
			{
				//是否需要修改學生的成績
				ClearScreen();	
				Print_Info_To_console("是否需要修改學生的成績?按1確定,按2不需要\n",hOut,pos,0,1,FOREGROUND_GREEN | 0x8);
				fflush(stdout);
				fflush(stdin);
				ch = getch();
				if(ch == '1')
				{
					ClearScreen();	
					Print_Info_To_console("修改學生成績為:",hOut,pos,0,1,FOREGROUND_GREEN | 0x8);
					scanf("%f" , &(array[location].score));
					Print_Info_To_console("修改學生成績成功,請按任意鍵返回主選單\n",hOut,pos,0,2,FOREGROUND_GREEN | 0x8);
					sleep(1);
					fflush(stdin);
					getchar();
					return ;
				}
				if(ch == '2')
				{
					return ;
				}
			}
		}
	}
	if(ch == '2')
	{
		Print_Info_To_console("請按任意鍵返回主選單\n",hOut,pos,0,2,FOREGROUND_GREEN | 0x8);
		fflush(stdin);
		getchar();
		return ;
	}
}
//學生資訊刪除
void stu_delete(HANDLE hOut)
{
	char ch ; 
	int id ; 
	char name[30] ; 
repeat3:
	ClearScreen();	
	Print_Info_To_console(" 學生資訊刪除\n",hOut,pos,30,0,FOREGROUND_GREEN | 0x8);
	Print_Info_To_console(" 請選擇按什麼方式刪除學生資訊 :\n",hOut,pos,20,0,FOREGROUND_GREEN | 0x8);
	Print_Info_To_console("			1.ID",hOut,pos,10,1,FOREGROUND_GREEN | 0x8);
	Print_Info_To_console("			2.NAME\n",hOut,pos,10,2,FOREGROUND_GREEN | 0x8);
	fflush(stdout);
	ch = getch(); 
	ClearScreen();	
	int i , j ; 
	if(ch == '1')
	{
		Print_Info_To_console("請輸入ID:\n",hOut,pos,0,1,FOREGROUND_GREEN | 0x8);
		scanf("%d" , &id);
		getchar();
		for(i = 0 ; i < stucount ; i++)
		{
			if(array[i].id == id)
			{
				SetConsoleTextAttribute(hOut, FOREGROUND_RED| 0x8); 
				printf("刪除 : ID:%d  NAME:%s  score:%f\n" , array[i].id , array[i].name , array[i].score);
				for(j = i ; j < stucount -1 ; j++)
					array[j] = array[j+1] ;
				stucount-- ;
				break ;
			}
		}
	}
	if(ch == '2')
	{
		Print_Info_To_console("請輸入NAME:\n",hOut,pos,0,1,FOREGROUND_GREEN | 0x8);
		scanf("%s" , name);
		getchar();
		for(i = 0 ; i < stucount ; i++)
		{
			if(strcmp(array[i].name , name) == 0)
			{
				SetConsoleTextAttribute(hOut, FOREGROUND_RED| 0x8); 
				printf("刪除 : ID:%d  NAME:%s  score:%f\n" , array[i].id , array[i].name , array[i].score);
				for(j = i ; j < stucount -1 ; j++)
					array[j] = array[j+1] ;
				stucount-- ;
				break ;
			}
		}
	}
	if(ch != '1' && ch != '2')
	{
		goto repeat3;
	}
	sleep(1);
}
重點看下最新的兩個介面的更新演示過程:

學生資訊修改演示:


學生資訊刪除演示:

相關推薦

C語言實現一個列表學生資訊管理系統(完善)

http://blog.csdn.net/morixinguan/article/details/77489633上節,我們實現了學生資訊管理系統的大多數功能,但還有兩個功能沒有實現,就是學生資訊修改還有學生資訊刪除了。當然,程式中依然存在諸多的BUG,比如,scanf和ge

使用python實現一個簡單的學生資訊管理系統

最近公司搬辦公室,雜七雜八的事情比較多,又碰上業務要上線了。。。很多事情堆到一起來做,導致最近沒什麼時間學習,寫部落格。前兩天勝利日放假,把以前用java寫的學生資訊管理系統用python重新寫了一遍,以便於幫助python的學習。 好了,廢話不多說,首先進行需求分析,下面是我根據需求畫的系

用連結串列實現一個簡單的學生操作管理系統C語言

#include <stdio.h> #include <math.h> #include <string.h> #include <malloc.h> #include <stdlib.h> #def

java 一個簡單的學生資訊管理系統

用java來寫一個管理系統 我第一次做資訊管理系統是用C語言做的,當時的第一感覺就是指標真的很好使,但是java中沒有指標,這讓我不能指哪兒打哪兒,而且兩種語言的核心思想也是不同的—一個面向過程,一個面向物件。這使得我在思想上要有轉變,這個管理系統我完成的

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

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

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

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

C語言實現中綴表達轉後綴表達

ctype 結束 錯誤 ini c語言實現 base color src 格式 代碼如下: #include <stdio.h> #include <stdlib.h> #include <ctype.h> #define STACK

使用C語言實現一個虛擬機

doesn 寄存器 php 浪費 vid c11 machine 指向 編程語言 使用C語言實現一個虛擬機 2015-6-22 21:32| 發布者: joejoe0332| 查看: 2891| 評論: 0|原作者: leoxu, Serval, 社會主義好, los

c語言 實現一個函式,判斷一個數是不是素數

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

c語言實現一個簡單的通訊錄

通訊錄的c語言實現原始碼 簡單通訊錄的實現還是包括三個原始檔,test.c(實現通訊錄主邏輯),txl.c(實現用到的各個函式),txl.h(存放txl中用到的各種標頭檔案與宣告)。 txl.h #ifndef __TXL_H__//**txl.h** #defi

C語言實現一個函式,可以左旋字串中的k個字元

// 實現一個函式,可以左旋字串中的k個字元   例如:                 //ABCD左旋一個字元得到BCDA                 //ABCD左旋兩個字元得到CDAB    解題思路:                   1> 先理思

C語言實現一個鍵值對結構demo

主要思路是有兩個指標陣列,一個為key,一個為value,用索引一一對應實現一個key對應一個value。包括了增加和刪除,控制檯列印方法,現在仍有些指標指向記憶體類的bug需注意。這個程式嚴格來說還算不上雜湊。 #include<stdio.h>

c語言學生資訊管理系統(連結串列、檔案)

#include<stdio.h>                                               /*呼叫標頭檔案*/ #include<stdlib.h> #include<string.h> #inclu

c語言實現 一個通訊錄(實現 增加、刪除、查詢、修改、顯示、清空功能)

源程式標頭檔案contact.h #ifndef _CONTACT_H__ #define _CONTACT_H__ #define NAME_MAX 20 #define SEX_MAX 5 #define TELE_MAX 15 #define ADDR_MAX 5

綜合例項:用C語言實現一個自定義的shell程式

      一個shell需要實現若干功能,比如解釋執行命令,支援輸入輸出重定向,支援管道,後臺執行程式等。首先對要實現的功能做一個簡要介紹:       (1)輸出重定向:就是把執行某命令後的結果輸出到某個檔案。例如: ls -al > list.txt  

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

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

【二分查詢】用C語言實現一個有序陣列的二分查詢

什麼是二分查詢? 首先,二分查詢也叫折半查詢,它是對於一組有序(升序或降序)數列來說的,我們舉例子說明這個思想。 例如:猜數字遊戲 隨機給出1-100內的一個數字,請猜出這個數字 那我們不能隨機沒有規律的去猜,這時考慮二分查詢的思想 例如38 第一次

C語言-------實現一個簡單的單向連結串列

編寫一個連結串列程式,在程式中實現簡單的功能#include <stdio.h> #include <stdlib.h> struct node{ int num; char name[20]; struct node* nex

[譯]C語言實現一個簡易的Hash table(1)

說明 Hash table翻譯過來就是Hash表,是一種提供了類似於關聯陣列的資料結構,可以通過key執行搜尋、插入和刪除操作。Hash表由一些列桶(buckets)組成,而每一個bucket都是由key-value的形式組成。儲存時都是以key-value儲存的,因為當要定位一個value時,需要把k

[譯]C語言實現一個簡易的Hash table(2)

上一章,簡單介紹了Hash Table,並提出了本教程中要實現的幾個Hash Table的方法,有search(a, k)、insert(a, k, v)和delete(a, k),本章將介紹Hash table使用的資料結構。 Hash table資料結構 hash表中儲存的每一項key-value