C語言實現一個列表式的學生資訊管理系統(完善)
http://blog.csdn.net/morixinguan/article/details/77489633
上節,我們實現了學生資訊管理系統的大多數功能,但還有兩個功能沒有實現,就是學生資訊修改還有學生資訊刪除了。當然,程式中依然存在諸多的BUG,比如,scanf和getchar函式就是一對冤家,如果用了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