日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言答题程序设计

發布時間:2023/12/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言答题程序设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目設計:

單位:
懷化學院計算機科學與工程學院
計算機科學與技術專業

課程c語言高級程序項目設計
班級,組號1901班,第二組
團隊名稱我行,我C!
組員袁年財(組長),王樂,楊令
課題多功能測驗程序

一、課程設計題目基本要求介紹

功能模塊一:登錄
1)連接服務器,限制賬號要以10位學號+姓名的方式登錄,否則就重新登錄
2)登錄成功后將基本信息發送給服務器
3)登錄成功后將窗口標題修改為賬號名

功能模塊二:預備工作
1)修改窗口名之后,輸出測驗相關的提示信息、限時信息等
2)生成以用戶名命名的TXT文件
3)輸出測驗的相關提示信息(如限時與限 題)
4)答題前倒計時5秒(若為單機版聯系版,可由用戶自行設定)

功能模塊三:答題與記錄
1)從題庫中抽取隨機不重復的題(按一定的難易比例抽取)
2)輸出相應的題號與題目
3)提示用戶輸入答案
4)處理用戶的答案去掉開頭的誤輸空格與回車,還有中間的空格
5)判斷用戶答案正誤,輸出比較結果,正確則用綠色表示,錯誤則用紅色表示(便于用戶識別)
6)同時輸出所耗時間,所耗總時間,以答題數,正確題數
7)并將以上答題的過程信息記錄至TXT文檔之中
8)超時或者答完所有題之后,輸出總成績與評價,但不關閉程序,由用戶自行輸入一定指令后退出程序

功能模塊四:上傳成績
1)若考生成績達到某個級別,將生成【學生基本_EXAM.TXT】在服務器之下,記錄保存。
——————————————————————————————————————

二、流程圖

——————————————————————————————————————

三、項目進展

已實現功能:

1、連接服務器
①實現思想:利用Socket
②核心代碼:如下

#include <winsock2.h> #include <stdio.h> #include <stdlib.h>#pragma comment(lib , "ws2_32.lib")#define BUFSIZE 4096 /*緩沖區大小*/ #define PORT 0 #define IP 1int main( ) {WSADATA wsd;SOCKET sClient;char Buffer[BUFSIZE];int ret;struct sockaddr_in server;unsigned short port;struct hostent *host = NULL;char getparameter[2][30];printf("請輸入服務器端口號:");gets(getparameter[PORT]);printf("請輸入服務器IP地址:");gets(getparameter[IP]);/*加載Winsock DLL*/if (WSAStartup(MAKEWORD(2 , 2) , &wsd) != 0) {printf("Winsock 初始化失敗!\n");return 1;}/*創建Socket*/sClient = socket(AF_INET , SOCK_STREAM , IPPROTO_TCP);if (sClient == INVALID_SOCKET) {printf("socket() 失敗: %d\n" , WSAGetLastError());return 1;}/*指定服務器地址*/server.sin_family = AF_INET;port = atoi(getparameter[PORT]);server.sin_port = htons(port);server.sin_addr.s_addr = inet_addr(getparameter[IP]);if (server.sin_addr.s_addr == INADDR_NONE) {host = gethostbyname(getparameter[IP]); //輸入的地址可能是域名等if (host == NULL) {printf("無法解析服務端地址: %s\n" , getparameter[IP]);return 1;}CopyMemory(&server.sin_addr ,host->h_addr_list[0] ,host->h_length);}/*與服務器建立連接*/if (connect(sClient , (struct sockaddr*)&server ,sizeof(server)) == SOCKET_ERROR) {printf("connect() 失敗: %d\n" , WSAGetLastError());return 1;}//用完了,關閉socket句柄(文件描述符)closesocket(sClient);WSACleanup(); //清理return 0; }

③效果圖:


2、發送信息至服務器
①實現思想:從標準輸入讀取要發送的數據

②核心代碼:如下

//向服務器發送消息ret = send(sClient , array , strlen(array) , 0);//其中array為你想要發送到服務器的信息所存放的數組if (ret == 0) {break;}else if (ret == SOCKET_ERROR) {printf("send() 失敗: %d\n" , WSAGetLastError());break;}`

③效果圖:

3、限制賬號要以10位學號+姓名的方式登錄,否則重新登錄
①實現思想:判斷前十位是否為數字即可
②核心代碼:如下

void restrictedformat(char *array)//限制學號格式 { int g,count3=0;for(g=0;g<10;g++){if(array[g]>='0' && array[g]<='9'){count3=count3+1;}else{print("格式錯誤\n");}if(count3==10){print("格式正確n");}} }

③效果圖:

4、將窗口標題修改為賬號名
①實現思想:調用庫函數SetConsoleTitle
②核心代碼:如下

void modifytitle(char *account)//改窗口 {SetConsoleTitle(account); }`

③效果圖:

5、生成TXT文件,并向其中輸入答題過程信息
①實現思想:實現對文件的創建、打開和關閉并向其中輸入信息
②核心代碼:如下

FILE * fileif( (file = fopen(mymessage,"w")) == NULL ){printf("打開文件失敗\n");exit(0);}`fprintf(file,"%s本次的成績單:\n↓ ↓ ↓\n",mymessage); //此語句用來向文件中輸入內容

③效果圖:

6、每次答完題后都將內容輸入至文件中
①實現思想:在每答完一道題之后清空緩沖區,以保證答題過程信息及時的記錄其中
②核心代碼:如下

fflush(file);//隨著循環自動刷新文件內存緩沖區,可在答完每一道題之后向文件輸入答題過程信息 //參考鏈接:https://blog.csdn.net/zgdzjzz/article/details/98882466

③效果圖:

7、可限制時間答題
①實現思想:利用時間函數
②核心代碼:如下

//使用時需要有 #include<time.h> clock_t start_t,finish_t;//定義有關時間的變量 start_t = clock();//過程時間開始計時點 . .//此處為需要計時的程序 . finish_t = clock();//過程時間結束計時點 total_t = (double)(finish_t - start_t) / CLOCKS_PER_SEC;//算出時間,并將時間轉換為秒

③效果圖:

8、從題庫中隨機抽題
①實現思想:產生隨機數
②核心代碼:如下

/*使用時需要有以下兩個頭文件 #include <stdlib.h> #include <time.h>*/int a; srand((unsigned)time(NULL)); a = rand(); printf("%d\n", a);

③效果圖:

以下只是產生隨機數的例子并不是上面的程序執行的結果,用于抽題時,則表現為每出一道的題都為隨機抽取

9、去除用戶開頭誤輸的空格、回車和答案中的空格
①實現思想:運用getschar
②核心代碼:如下

void myrellyanswer(char *array)//輸入答案的處理用戶答案的函數 {char d;int i=0;do{d=getchar();}while(d=='\n'||d==' ');array[i]=d;i++;while(1){d=getchar();if(d==' '){continue;}else if(d=='\n'){break;}else {array[i]=d;i++;}}array[i]='\0';}

③效果圖:

10、用不同的顏色輸出相關信息
①實現思想:調用庫函數
②核心代碼:如下

void color(int x) //自定義函根據參數改變顏色 { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);//只有一個參數,輸入顏色代號即可改變為相應的顏色 }

③效果圖:如圖可見到多種顏色,便于識別的同時不至于顯得單調

11、設置相應的評分標準
①實現思想:利用分支語句
②核心代碼:如下

switch(x){case 2 :show_mymessage(14,file," 你的成績為C\n 還不錯> v <!!!\n\n");break;case 3 :show_mymessage(11,file," 你的成績為B\n 真優秀^ _ ^!!!\n\n");break;case 5 :show_mymessage(3,file," 你的成績為A\n 造化鐘神秀^ v ^!!!\n\n");break;default :show_mymessage(13,file," 不合格> _ <!!!\n\n"); }

③效果圖:

12、將改顏色的函數、輸出的函數和輸入信息至文檔的函數封裝為一個函數
①實現思想:參照鏈接:此處為示例封裝函數的地址
②核心代碼:如下

void show_mymessage(int x,FILE *file,const char *cmd, ...)//輸出有色內容的同時輸入至文件中 {va_list args;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);va_start(args,cmd);vprintf(cmd,args);vfprintf(file,cmd,args);va_end(args);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7); }

③效果圖:


—————————————————————————————————————

四、項目未完成的功能

正在實現功能:

1.按百分比輸出難題和簡單的題
還未實現,仍然需要時間去摸索更為的簡便方法

今后打算實現的功能::

1.若考生成績達到某個級別,將發送到服務器的答題過程信息保存在服務器下
還需要系統的學習關于網絡編程的相關知識,并靈活運用

——————————————————————————————————————

五、項目版本更新日志

版本號更新描述負責人日期占總工作量的百分比
V2.0.1實現了聯機版:可以自定義連接服務器,并向服務器發送一定的信息袁年財11/24/ 02:105%
V1.5.5答完題后顯示評分細則王樂11/23/ 22:303.4%
V1.5.4在用戶答完題后,按任意鍵不會退出,在輸入一定內容后才可退出王樂,袁年財11/23/ 23:304.2%
V1.5.3精確判斷學號格式只能是 1(8或9)00130XXX 的形式使程序僅限于計院的18和19級學生使用袁年財11/23/ 19:304.2%
V1.5.2優化了文件輸入功能,可在答完每一道題后,將答題過程信息輸入至文件夾文件夾,以防在失誤關閉程序后答題過程信息丟失袁年財11/23/ 18:304.2%
V1.5.1優化了界面,在完成準備流程后的答題前清空屏幕楊令11/22/ 12:204.2%
V1.5.0優化了題庫,利用分割數組的方法將答案與原題綁在一起,便于添加題目,同時又可防止比較答案時題目與答案錯位袁年財11/22/ 1:104.2%
V1.4.6在題庫中新增了大量難題和易題楊令11/21/18:104.2%
V1.4.5完善了防誤輸功能,可以防止因用戶在答題時在開頭誤輸回車而導致答題錯誤袁年財11/21/18:104.2%
V1.4.4在用戶輸入學號+姓名之后,判定學號格式是否為10位數字的格式袁年財11/21/ 9:304.2%
V1.4.3新增了評級判定功能王樂11/20/20:504.2%
V1.4.2增加了防誤輸功能,防止因用戶在答案中誤輸空格而導致答題錯誤袁年財11/19/18:102.6%
V1.4.1新增了記錄用戶答題過程信息,并記錄在相應路徑的以用戶名為名的TXT文件中王樂11/18/21:124.2%
V1.3.2新增了輸入用戶信息之后,將窗口改為用戶名袁年財11/18/21:124.2%
V1.3.1完善了計時功能,每答出一道題后輸出所用總時間的同時,輸出回答該題所用時間袁年財11/17/20:404.2%
V1.3.0新增更改字體顏色函數,使程序在視覺上不會過于單調袁年財11/17/18:304.2%
V1.2.1新增了開始答題前倒計時5秒功能袁年財11/17/16:104.2%
V1.2.0新增計時功能:每答出一道題輸出總時間。新增了每次回答題目后都輸出已答對提數王樂,袁年財11/17/13:304.2%
V1.1.1完善隨機出題功能:不再重復出相同的題袁年財11/16/21:094.2%
V1.1.0新增隨機出題功能(可能重復),顯示完成題目后的總成績袁年財11/16/13:365%
V1.0.0完成簡單答題程序總架構袁年財11/16/13:005%
總計共發布21個版本\耗時8共完成90%

—————————————————————————————————————

六、課程設計報告

鏈接:此鏈接為此次項目的課程設計報告PPT

—————————————————————————————————————

七、每位成員的過程體會

1:袁年財:
自我感悟: 在這次的項目中,我確實是收益頗豐啊!我在不斷的調用、定義中加深了對函數的理解,同時也更為體會到了指針的魅力。
在敲幾百行代碼的過程中我意識到了結構化程序的重要性,以及宏定義的方便性。在開始任務之前老師讓我們寫出了任務需求表和流程圖以及函數詳細設計表,開始時我還覺得沒有什么太大的必要性,而在開始任務的過程中,我便越發覺得老師的明智,當你在敲代碼時經常會需要問接下來需要做什么,而在寫出了任務需求表及其流程圖之后,你會覺得任務極其的明確,絲毫不會覺得自己像一個無頭蒼蠅。總的來說在這次項目中是受益良多,回味無窮!
自我檢討: 在這次的項目中,我有個極大的缺點就是包攬了太多的任務,導致自己經常熬夜敲代碼,絲毫沒有團隊意識,沒有學會和隊友們分擔作業,這是我在擔任組長這個位置的極大失責。

2:王樂:
我的體會是:剛開始時是最難的,沒有思緒和目標,然后在寫需求分析的時候有了一點想法,后面我在敲文件的輸入輸出時,總是有錯誤,然后回過頭把書看一遍,總之:書讀百遍其義自見,然后我想說的是,我們第二組最優秀!

3:楊令:
過程體會:編寫這個程序時,我只做了很少一部分。但還是感覺挺難搞的。在編寫過程中也參與得少,但是我感覺我們的程序還棒的。希望下次能多參與這些偏程。給自己加個油。

—————————————————————————————————————

八、最后

這篇博文,只是供大家大致的參考,其中貼上的代碼,是其中重要函數的代碼,如果有博友對這個多功能答題程序想要更為詳細的了解,或者提出寶貴的意見的話,歡迎大家評論在下方!

總結

以上是生活随笔為你收集整理的c语言答题程序设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。