C语言 校园歌手比赛系统
源碼點這里
運行環境:codeblocks
1.引言...?
1.1 問題提出...?
1.2 本系統涉及的知識點...?
1.3 功能要求...?
2.總體設計...?
2.1 功能模塊設計...?
2.2 主控main()函數流程設計?
2.3 數據結構設計...?
2.4 子模塊設計...?
2.4.1 添加記錄模塊...?
2.4.2 查詢記錄模塊...?
2.4.3 更新記錄模塊...?
2.4.4文件讀寫模塊...?
2.4.5?其他模塊...?
2.4.5.1密碼模塊...?
2.4.5.2輸出顏色模塊...
2.4.5.3背景顏色模塊...?
2.4.5.4系統時間模塊...?
2.5 函數功能描述...?
3.程序實現...?
3.1 主界面...?
3.2 子模塊界面...?
3.2.1密碼驗證界面(見圖表2)...?
3.2.2分數錄入(見圖表3)...?
3.2.3分數顯示(見圖表4)...?
3.2.4評委均分(見圖表5)...?
3.2.5分數排序(見圖表6)...?
3.2.6分數查找(見圖表7)...?
3.2.7信息修改(見圖表8)...?
3.2.8分數刪除(見圖表9)...?
3.2.8密碼修改(見圖表10)...?
3.2.8密碼修改(見圖表10)...?
4 總結...?
4.1程序調試情況...?
4.2本人在程序設計中感想...?
1.1 問題提出
在本實驗中,主要實現以下幾個問題:
1.輸入選手數據(班級,編號,姓名,十個評委評分并儲存數據到文件);
2.輸出選手數據(班級,編號,姓名,總分,去掉最高分和最低分后的平均分);
3.顯示評委均分(排序出十個評委的打分平均分,根據高低判斷誰是嚴厲裁判誰 是溫柔裁判);
4.實現選手的排序(按照平均分來排序);
5.成績查詢(按照姓名查詢,編號查詢,并且查詢過后能進行修改 刪除等的操作);
6.信息修改(能夠修改選手的信息如班級,姓名,編號,某些評委的分數,并且修改了分數后,平均分和總分能夠隨之刷新);
7.刪除分數(能夠根據選手的編號或者姓名來刪除選手的成績);
8.修改登錄密碼(保護程序的安全性,實現登錄密碼的修改,五次機會輸入密碼,五次密碼輸入錯誤,顯示退出程序,并且提醒密碼的查看地址。就像app的找回密碼功能);
9.進入修改界面想要返回主菜單卻沒有功能鍵,新增一個break語句,能夠跳出循環
10刪除成績前面應該顯示出選手的成績,不然不知道刪除誰
11能夠修改輸出顏色,讓提示更加醒目
12能改變背景顏色而不是單一的黑色
13選擇退出會有緩沖的時間
14頂部時間顯示,到點就下班
1.2 本系統涉及的知識點
1.結構體變量:struct Student
??? ?{
}stu[1000];
struct Student stu[1000],*p=stu; 定義全局p->struct Student stu[];
2.數組:char cla[20]:輸入選手班級
???????? Char name[20]輸入選手姓名
???????? Float score[10]輸入十個評委的打分
char tempname[20]用來定義名字的臨時變量
char tempcla[20]用來定義班級的臨時變量
char password[20],key[20];初始密碼
??????? 3.循環:for(i=0;i<count;i++)
???????????????????? if(stu[count].num==stu[i].num)判斷輸入的選手編號是否重復
???????????????????? if(strcmp(searchname,stu[i].name)==0)查找名字
???????????????????? if(searchnum==stu[i].num)查找編號
????????????????? for(j=0;j<10;j++)
????????????? ????????if(max<stu[count].score[j]);
? ????????????????????max=stu[count].score[j];找出分數最大值
??? ??????????????for(k=0;k<10;k++)
?? ???????????????????if(max<stu[count].score[k]);
?? ???????????????????min=stu[count].score[k];找出分數最小值
????????????????? for(i=0;i<count;i++)
??????????? ??? ??????printf();顯示數據;
for(i=searchindex;i<count-1;i++)
strcpy(stu[i].cla,stu[i+1].cla);
??????????? stu[i].num=stu[i+1].num;刪除相關信息
???????
?4.函數
????????????? void input(struct Student stu[])選手分數輸入
????????????? void print(struct Student stu[])選手分數顯示
????????????? void average(struct Student stu[])評委打的平均分
????????????? void sort(struct Student stu[])選手按平均分排序(分數排序子函數)
????????????? void projectsort(struct Student stu[])分數排序
????????????? void findnum(struct Student stu[])按編號查找(分數查詢子函數)
????????????? void findname(struct Student stu[])按姓名查找(分數查詢子函數)
????????????? void find(struct Student stu[])分數查詢
????????????? void del(struct Student stu[])分數刪除
void delnum(struct Student stu[])按照編號刪除(分數刪除子函數)
void delname(struct Student stu[])按照姓名刪除(分數刪除子函數)
void change(struct Student stu[])修改信息
void read(struct Student stu[])文件導入
void save(struct Student stu[])文件儲存
int up()修改密碼
void save_password(char s[])保存密碼的修改
void hidepassword(char *pswd, unsigned maxlen)隱藏密碼的輸入
void color(const unsigned short textColor)顏色輸出
?5.分支
???? If語句:
????????? if(stu[count].num==stu[i].num)判斷輸入是否為重復編號
????????? if(max<stu[count].score[j]);判斷最大值
??? ??????if(min>stu[count].score[k]);判斷最小值
????????? if(searchindex==-1)判斷輸入的數據是否有效
????????? if(strcmp(searchname,stu[i].name)==0)判斷名字是否存在
????????? if(count==0)判斷是否輸入了選手信息
????????? if(fread(&stu[i],sizeof(struct Student),1,fp)!=1)判斷文件字節數
????????? if(key[i]!=password[i])判斷密碼是否正確 ?????????
???????????????
??????????? if else語句:
??????????? ??????if(count==0)
???? ????????????????printf("\n\n您尚未錄入選手信息,請返回菜單進行錄入!\n");
?? ???????????????else//否則輸出選手信息
??????????? switch 語句:
????????????????? switch(choose)
??? ??? ??????????????????case 1:? //成績錄入
??? ? ????????????????????case 2:? //成績顯示和排序
??? ?? ???????????????????case 3:? //均科成績
??? ??? ??????????????????case 4:? //成績排序
??? ?? ???????????????????case 5:? //成績查找?? ??????
??? ??????????????? ? ????case 6:? //成績修改?????? ?
??? ?? ???????????????? ??case 7:? //成績刪除?? ??
?????? ???????????????? ??case 8:? //密碼修改?????? ?
??? ??? ??????????????? ??case 0:? //退出系統
??? ?
?? ???????6.指針
???????????????? struct Student stu[1000],*p=stu;
????????? 7.goto語句;
1.3 功能要求
2.總體設計
2.1 功能模塊設計
??????????????
2.2 主控main()函數流程設計
2.3 數據結構設計
1.struct Student?????? //定義結構體變量
??? {
??????? char cla[20];//班級
????????????? int num;//編號
??????? char name[20];//姓名
??????? float score[10];//分數
??????? float aver;//平均分
??????? float sum;//總分
??? }stu[1000];
struct Student stu[1000],*p=stu; //定義全局p->struct Student stu[]
2.int count=0;?? //定義全局變量count,錄入一個選手信息,count就加一;
3.float min,max,Max,Min;//用來找出十個評委中的最高分和最低分
4.int choose;//用來反饋用戶的輸入情況
5.int i,j;用來循環輸入輸出
7 char tempname[20];?
char tempcla[20];//定義姓名和班級的臨時變量,用來排序
8. int searchnum;//用來查找選手編號
9. char searchname[20];//用來查找學生姓名
10.int sum2=0;//用來循環密碼的輸入次數
2.4 子模塊設計
2.4.1 添加記錄模塊
2.4.2 查詢記錄模塊
| 編號查找 |
| 姓名查找 |
| 全部顯示 |
| 返回菜單 |
| 找到 |
2.4.3 更新記錄模塊
2.4.4文件讀寫模塊
2.4.5?其他模塊
2.4.5.1密碼模塊
2.4.5.2輸出顏色模塊
2.4.5.3背景顏色模塊
system("color 3E");藍色背景
2.4.5.4系統時間模塊
time_t timep;??? //系統時間
?????? struct tm *p_1;
?????? time (&timep);
?????? p_1=gmtime(&timep);
2.5 函數功能描述
(1)輸入模塊
1)函數原形:void input(struct student stu[ ])
2)功能:
實現選手的班級編號姓名十個評委打分的輸入,并保存在文件中
3)變量及類型:
Float min,max:浮點型形參變量,用于找出最大值最小值
Int ij:循環控制變量
void save(struct Student stu[]);保存數據到文件
char tempcla[10]={"-1"};定義臨時姓名字符串,用于按(-1)返回菜單
??(2)輸出模塊
實現選手的信息輸出
sort(struct Student stu[]);調用排序函數,將信息排序后輸出
if(count==0):用全局變量count判斷是否錄入了數據
(3)評委均分模塊
計算出每個評委打分的平均分
Int i:循環控制變量
float aver[10]:均分變量
float total[10]={0}:存放評委打分變量
(4)分數排序模塊
??? char tempname[20];
char tempcla[20];字符型臨時變量,用于存放班級姓名
int ij:循環控制變量
float t:排序分數的中間變量
int t1;排序編號的中間變量
???? (5)分數查找模塊
?
?
???????????? void findname(struct Student stu[]):按照姓名查詢
???????????? void find(struct Student stu[]):查詢
???????? 按照姓名編號查詢
?? ?int choose,n;整型變量 對下一步操作進行指定
??? ?int i;循環控制變量
???? char searchname[20];字符型變量用來查找名字
???? int searchnum;整型變量 用來查找編號
(6)信息修改
?? int ij:循環控制變量
??? ?int choose:下一步操作變量
int searchnum,tempnum:修改編號的臨時變量
(7)刪除分數模塊
?
?
??????????? void delnum(struct Student stu[]):按編號刪除
??????????? void delname(struct Student stu[]):按姓名刪除
??????????? void dell(struct Student stu[]):刪除數據
Int i:控制循環變量
Int choose:整型變量,用于進行下一步操作
?? char tempname[10]={"-1"};字符型變量,用于輸入名字和返回操作
(8)修改密碼
?
?
??????? int up();密碼的修改
??????? void save_password(char s[]);修改密碼的保存
??????? void yincangpassword(char *pswd, unsigned maxlen);隱藏密碼輸入
?????? 實現密碼的輸入和更改,并保存在文件里面
??? FILE *fp= fopen("password.txt","w+");定義文件指針
??? char buff = '\0';
4)說明:
???? 參考csdn源代碼,并未全懂隱藏密碼的輸入。
3.程序實現
3.1 主界面
圖表 1
3.2 子模塊界面
3.2.1密碼驗證界面(見圖表2)
圖表 2
3.2.2分數錄入(見圖表3)
?
圖表 3
3.2.3分數顯示(見圖表4)
圖表 4
3.2.4評委均分(見圖表5)
圖表 5
3.2.5分數排序(見圖表6)
圖表 6
3.2.6分數查找(見圖表7)
圖表 7
3.2.7信息修改(見圖表8)
圖表 8
3.2.8分數刪除(見圖表9)
圖表 9
3.2.8密碼修改(見圖表10)
?
4 總結
4.1程序調試情況
程序運行無誤無警告
4.2本人在程序設計中感想
?? ?當初選擇這個校園歌手比賽系統項目,最初呢是覺得它和學生成績管理系統版有點相似,做起來會比較輕松。因為我的編程水平不怎么行,所以光是構思框架,我便用了很長時間。為了少走彎路,我還參考了B站的學生成績管理系統視頻,csdn上的學生成績管理系統源代碼,而最主要的模板是書上的學生管理系統系統v2.0。
先說說編程:根據題目的要求要做到輸入輸出,評委打分,成績排序,數據查詢,追加學生數據,存儲,導入,退出。我根據自己的想法,將評委打分包含在輸入選手信息中。為了便捷性,我直接將存儲功能放在每個操作最后,實現自動存儲而不是手動存儲,畢竟我在編程的時候經常忘記ctrl+s。另外,為了保護程序的安全性,我設置了用密碼來登錄系統。用戶有五次機會輸入密碼,一但五次密碼輸入錯誤,便會退出程序。后來我又為了用戶的體驗舒適度,增加了一個如同QQ忘記密碼找回密碼的超級低配版功能,即提示用戶在保存密碼的文件里面查看登錄密碼。
為了程序的健壯性,我并沒有用循環來輸入數據,而是定義全局變量來記錄輸入的選手人數。根據現實生活,選手的編號是唯一的,但是可能出現同班同名的情況。因此我僅對編號進行了查重處理。但是在修改信息或者刪除信息的時候,需要用獨立的編號來刪除同名者的信息。最開始我定義的評委分數是整型變量,但是偶然看見電視上的打分有小數,我便改成了浮點型,并且對輸入范圍進行了提示和規范。輸入完成后,便會有繼續輸入操作和退出操作供用戶選擇。
我增加了一個評委均分選項,可對每個評委打分的平均分進行顯示,進而判斷誰是嚴厲(無情)裁判誰是仁慈(寬松)裁判。
在進行分數查找的測試中,我發現查找選手信息后就不能進行下一步了,僅僅一個光禿禿的顯示查找的選手信息,為了完善功能,我在查找成功后增加了修改和刪除的選項。
對于信息修改。我實現了對選手的各項信息皆能修改,并且對評委分數修改后,能夠刷新平均分和總分并顯示。
對于修改密碼,我將密碼用*隱藏,并且在修改密碼的階段,去掉了驗證舊密碼的過程,這為開源文件省去了不必要的麻煩(但是極易被他人隨意的篡改),進而直接輸入新密碼并提醒用戶退出去重新登陸。
在UI界面,我用自己喜歡的藍色作為背景色,在登陸界面顯示了音樂符號的圖案,與歌手比賽更加貼近。對于輸錯5次密碼后,我用紅色的輸出字體來提示用戶查找密碼,紅色字體更加醒目。
這次項目最大的收獲,就是一個人完成了整個項目,并且過程中修改錯誤沒有尋求他人的幫助。當看到程序成功編譯并且無警告時,頓感所付出的一切都是值得的。前前后后大概七天時間,有時候遇到障礙就查找資料或者等明天想法出來再弄,過程有些許曲折。
尤其是在參考程序時,才發現原來還可以這樣處理,讓我大開眼界無比興奮。這次成功做出項目,使我增強了對編程的信心,強烈提高了我對編程的興趣,鞏固了我所學的知識點并讓我學以致用。不僅如此,我還學到了新的知識點,減少了自己的知識盲區。
我感覺全部程序并不是我自己編寫出來是我的不足,比如隱藏密碼我就是借鑒了csdn的代碼。另外程序的功能還是不夠完善,比如在退出信息查詢的時候 需要點擊多次才能回車,信息修改只能修改一次不能重復修改,排序只能按照平均分排序而不能按照編號排序等等等等
但是正因為有不足,才讓我有前進的動力,我會不斷改進豐富該系統,并且用新知識改善它。在我自身方面,我更會嚴格要求自己,給自己的人生交上一份滿意的答卷!
總結
以上是生活随笔為你收集整理的C语言 校园歌手比赛系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云aliyun 的SLB 对 ECS
- 下一篇: 轻松制作短视频网页工具:锐视RyView