您好,登錄后才能下訂單哦!
鑒于C語言實現的通訊錄,為了鞏固C語言的基礎知識,試著寫一個簡單的學生選課系統。
思路比較簡單:
1.回滾顯示各種提示信息或操作信息
2.鏈表操作。
代碼中有管理員部分功能沒有實現,學生和老師的功能基本實現,但有待加固,如果初學者可是試著去完善一下。
還可以將老師,學生的信息輸出到文件文本中,本代碼中沒有實現,但并不是很難。
代碼如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> /* 總鏈表——存放所有信息 */ typedef struct Sum_Node { /* 學生信息 */ char stuNo[20][20]; char stuName[20][20]; char stuSex[20][20]; /* 課程信息 */ char CourseNum[20]; char CourseName[20]; char CourseTeacher[20]; struct Sum_Node *next; }TotalNode; /* 鏈表管理員——暫時不需要 */ /*typedef struct Node { char Num[20]; char Name[20]; char Sex[10]; struct Node *next; }Manager_Node;*/ char studentAccount[20]; char studentPassword[20]; char teacherAccount[20]; char teacherPassword[20]; char managerAccount[20]; char managerPassword[20]; /* 定義結構體指針 */ TotalNode *pTeacher; TotalNode *pStudent; /* 函數的聲明 */ void checkPerson_Msg(TotalNode *phead,int n); void CreateTeacherNode(TotalNode *head); /* 學生信息的輸出-鏈表 */ void OutStudentNode(TotalNode *head,char *Account) { TotalNode *p; int num=0; int i,j; int flag=0; char Account_random[20]=""; pStudent=pTeacher; // 學生和老師用的鏈表是同一個 p=pStudent; puts("******所選課程信息******"); puts("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); if(pStudent==NULL) { puts("沒有數據!"); puts("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); return; } printf("請輸入所要查詢人的姓名:"); gets(Account_random); // 獲取所要查詢的學生姓名 if(0 == Account_random[0]) { gets(Account_random); } while(p!=NULL) { for(j=0;j<20;j++) { if(0 == strcmp(p->stuName[j],Account_random)) { printf("課程代碼:%s\t",p->CourseNum); printf("課程名稱:%s\t",p->CourseName); printf("課程老師:%s\t",p->CourseTeacher); for(i=0;i<20;i++) { if(p->stuNo[i][0]!='\0') { num++; } } printf("選課學生:%d\t",num); num=0; // 清0操作 putchar('\n'); flag=1; } } p=p->next; } if(0 == flag) { puts("沒有該學生選課信息!!!!"); } puts("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); putchar('\n'); } /* 學生信息的插入-鏈表 */ void InsertStudentNode(TotalNode *head,char *Account) { TotalNode *p; int i; char courseCode[20]=""; pStudent=pTeacher; // 學生和老師用的鏈表是同一個,都是鏈表頭 p=pStudent; if(p==NULL) { puts("等待教師錄入選課信息,請下次再進行選擇!!"); return; } printf("【請輸入正確的課程代碼】"); gets(courseCode); if(0 == courseCode[0]) { gets(courseCode); } while(p!=NULL) { if(0 == strcmp(p->CourseNum, courseCode)) { for(i=0;i<20;i++) { if(p->stuNo[i][0] == '\0') { printf("請輸入學號:"); gets(p->stuNo[i]); printf("請輸入姓名:"); gets(p->stuName[i]); printf("請輸入性別:"); gets(p->stuSex[i]); puts("選課成功!!!!"); return; } } } p=p->next; } puts("$$$$$$選課失敗,請重新選擇$$$$$$"); } /* 刪除所選課程 */ void DeleteStudentNode(TotalNode *head,char *Account) { char coursNo[20]=""; // 課程代碼 char student[20]=""; // 學生姓名 TotalNode *p; int i; int flag=0; pStudent=pTeacher; // 學生和老師用的鏈表是同一個,都是鏈表頭 p=pStudent; if(pStudent==NULL) { puts("沒選該課程,刪除失敗!!!!"); return; } printf("【輸入學生姓名】"); gets(student); if(0 == student[0]) { gets(student); } printf("【請輸入刪除的課程代碼】"); gets(coursNo); if(0 == coursNo[0]) { gets(coursNo); } while(p!=NULL) { if(0==strcmp(p->CourseNum,coursNo)) // 查詢所要刪除的課程代碼 { for(i=0;i<20;i++) { if(0==strcmp(p->stuName[i],student)) { /* 初始化清0操作 */ p->stuNo[i][0]='\0'; p->stuName[i][0]='\0'; p->stuSex[i][0]='\0'; puts("刪除成功!!!!"); flag=1; // 刪除標志位 } } } p=p->next; } if(0 == flag) // 如果刪除成功標志位置1 { puts("刪除失敗!!!!"); } } /* 教師信息的輸出-鏈表 */ void OutTeacherNode(TotalNode *head) { TotalNode *p; int num=0; int i; p=pTeacher; puts("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); if(pTeacher==NULL) { puts("沒有數據!"); puts("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); return; } while(p!=NULL) { printf("課程代碼:%s\t",p->CourseNum); printf("課程名稱:%s\t",p->CourseName); printf("課程老師:%s\t",p->CourseTeacher); for(i=0;i<20;i++) { if(p->stuNo[i][0]!='\0') { num++; } } printf("選課學生:%d\t",num); num=0; // 清0操作 putchar('\n'); p=p->next; } puts("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); putchar('\n'); } /* 教師信息的插入-鏈表 */ void InsertTeacherNode(TotalNode *head) { TotalNode *p; TotalNode *q; int i; p=pTeacher; // 教師鏈表的頭 if(pTeacher==NULL) { CreateTeacherNode(head); puts("添加成功!"); return; } while(p!=NULL) { if(p->next == NULL) { q=(TotalNode *)malloc(sizeof(TotalNode)); p->next=q; q->next=NULL; for(i=0;i<20;i++) { q->stuNo[i][0]='\0'; } printf("請輸入課程代碼:"); gets(q->CourseNum); if(0 == *q->CourseNum) { gets(q->CourseNum); } printf("請輸入課程名稱:"); gets(q->CourseName); printf("請輸入課程教師:"); gets(q->CourseTeacher); puts("添加成功!"); break; } p=p->next; } //pTeacher=head; } /* 教師信息的插入-鏈表 */ void CreateTeacherNode(TotalNode *head) { int i; pTeacher=(TotalNode *)malloc(sizeof(TotalNode)); pTeacher->next=NULL; for(i=0;i<20;i++) { pTeacher->stuNo[i][0]='\0'; } printf("請輸入課程代碼:"); gets(pTeacher->CourseNum); if(0 == *pTeacher->CourseNum) { gets(pTeacher->CourseNum); } printf("請輸入課程名稱:"); gets(pTeacher->CourseName); printf("請輸入課程教師:"); gets(pTeacher->CourseTeacher); //pTeacher=head; } /* 刪除指定數據 */ void DeleteTeacherNode(TotalNode *phead) { char coursNo[20]=""; // 課程代碼 TotalNode *p; TotalNode *s; p=pTeacher; // 教師鏈表的頭 s=pTeacher; if(NULL==pTeacher) { puts("沒有課程信息!!!!"); return; } printf("【請輸入刪除的課程代碼】"); gets(coursNo); if(0 == coursNo[0]) { gets(coursNo); } if(0 == strcmp(p->CourseNum,coursNo)) { pTeacher=p->next; puts("刪除成功!!"); return; } while(p != NULL) { if(0 == strcmp(p->CourseNum,coursNo)) { s->next=p->next; puts("刪除成功!!"); return; } s=p; p=p->next; } } /* 功能顯示 */ void display(TotalNode *phead) { int n; while(1) { puts("=========請選擇登錄頁面========="); puts("[1]學生登錄"); puts("[2]教師登錄"); puts("[3]管理員登錄"); puts("[4]退出系統"); while(1) // 循環檢查輸入的值是否正確 { printf("【請選擇】"); scanf("%d",&n); if(n>4 || n<1) { puts("輸入有誤,請選擇正確的選項:"); continue; // 輸入不正確,重新輸入 } else { break; // 輸入正確,退出循環 } } if( 1 == n ) // 學生登錄系統 { puts("=========歡迎登錄學生系統========="); printf("請輸入賬號和密碼\n"); checkPerson_Msg(phead,1); } if( 2 == n ) // 老師登錄系統 { puts("=========歡迎登錄教師系統========="); printf("請輸入賬號和密碼\n"); checkPerson_Msg(phead,2); } if( 3 == n ) // 管理員登錄系統 { puts("=========歡迎登錄管理員系統========="); printf("請輸入賬號和密碼\n"); checkPerson_Msg(phead,3); } if( 4 == n ) // 退出系統 { puts("@@@@@@@@@歡迎下次登錄,再見!!!@@@@@@@@@"); exit(0); } } } /* 學生登錄后的操作,查詢、修改 */ void Student_Mng(TotalNode *phead, char *Account,int n) { switch(n) { case 1: // 查詢 OutStudentNode(phead,Account); break; case 2: // 添加 InsertStudentNode(phead,Account); break; case 3: // 刪除 DeleteStudentNode(phead,Account); break; case 4: ; // 返回主頁面,上層已經實現,此處不需要考慮 break; default: puts("異常!"); break; } } /* 教師登錄后的操作,查詢、修改 */ void Teacher_Mng(TotalNode *phead, char *Account,int n) { switch(n) { case 1: // 查詢學生選課情況 OutTeacherNode(phead); break; case 2: // 添加和刪除課程信息 InsertTeacherNode(phead); break; case 3: DeleteTeacherNode(phead); break; case 4: break; // 上層實現其功能 default: puts("異常!"); break; } } /* 管理員登錄后的操作,查詢、修改 */ void Manager_Mng(char *Account, int n) { switch(n) { case 1: break; case 2: break; case 3: break; default: puts("異常!"); break; } } /* 顯示各功能登錄后的信息 */ void display_Detailed(TotalNode *phead ,char *Account,int n) { int in; switch(n) { case 1: while(1) { printf("=========歡迎%s同學=========\n",Account); puts("[1]查詢已選課程"); // 查詢自己所選的所有課程包括:課程代碼、課程名稱、任課老師 puts("[2]添加課程"); // 增加所選課程 puts("[3]刪除所選課程"); // 刪除所選課程 puts("[4]返回主頁面"); printf("【請選擇】"); scanf("%d",&in); if(4 == in) { return; // 返回上層登錄頁面 } Student_Mng(pStudent,Account, in); //puts("[4]"); } break; case 2: while(1) { printf("=========歡迎%s老師=========\n",Account); puts("[1]查詢學生選課信息"); // puts("[2]添加老師課程信息"); // puts("[3]刪除老師課程信息"); // puts("[4]返回主頁面"); printf("【請選擇】"); scanf("%d",&in); if(4 == in) { return; // 返回上層登錄頁面 } Teacher_Mng(pTeacher,Account, in); } //puts("[4]"); break; case 3: printf("=========歡迎%s同志=========\n",Account); puts("[1]查詢學生所選課程信息"); puts("[2]修改選課信息"); puts("[3]返回主頁面"); scanf("%d",&in); Manager_Mng(Account, in); //puts("[4]"); break; default: puts("異常!"); break; } } /* 驗證賬號密碼 */ void checkAccountandPassword(TotalNode *phead ,char *Account, char *Password,int n) { while(1) { gets(Account); /**/ if(0 == strcmp(Account,"wantin")) { while(1) { printf("請輸入密碼:"); gets(Password); if(0 == strcmp(Password,"123456")) { display_Detailed(phead,Account, n); return; } } } else { printf("請輸入賬號:"); } } } /* 校驗學生、教師、管理員的賬號 密碼 */ void checkPerson_Msg(TotalNode *phead , int n) { switch(n) { case 1: // 學生登錄 char studentAccount[20]; char studentPassword[20]; checkAccountandPassword(phead, studentAccount,studentPassword,n); break; case 2: // 教師登錄 char teacherAccount[20]; char teacherPassword[20]; checkAccountandPassword(phead, teacherAccount,teacherPassword,n); break; case 3: // 管理員登錄 char managerAccount[20]; char managerPassword[20]; checkAccountandPassword(phead, managerAccount,managerPassword,n); break; default: puts("異常!"); break; } } /* */ void main() { TotalNode *phead=NULL; display(phead); }
大家可以根據下面的操作來幫助讀懂這段代碼。
操作結果如下:
=========請選擇登錄頁面=========
[1]學生登錄
[2]教師登錄
[3]管理員登錄
[4]退出系統
【請選擇】2
=========歡迎登錄教師系統=========
請輸入賬號和密碼
請輸入賬號:wantin
請輸入密碼:123456
=========歡迎wantin老師=========
[1]查詢學生選課信息
[2]添加老師課程信息
[3]刪除老師課程信息
[4]返回主頁面
【請選擇】2
請輸入課程代碼:123
請輸入課程名稱:C語言
請輸入課程教師:王艇
添加成功!
=========歡迎wantin老師=========
[1]查詢學生選課信息
[2]添加老師課程信息
[3]刪除老師課程信息
[4]返回主頁面
【請選擇】2
請輸入課程代碼:456
請輸入課程名稱:Java
請輸入課程教師:王艇
添加成功!
=========歡迎wantin老師=========
[1]查詢學生選課信息
[2]添加老師課程信息
[3]刪除老師課程信息
[4]返回主頁面
【請選擇】2
請輸入課程代碼:789
請輸入課程名稱:PHP
請輸入課程教師:王艇
添加成功!
=========歡迎wantin老師=========
[1]查詢學生選課信息
[2]添加老師課程信息
[3]刪除老師課程信息
[4]返回主頁面
【請選擇】1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
課程代碼:123 課程名稱:C語言 課程老師:王艇 選課學生:0
課程代碼:456 課程名稱:Java 課程老師:王艇 選課學生:0
課程代碼:789 課程名稱:PHP 課程老師:王艇 選課學生:0
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
=========歡迎wantin老師=========
[1]查詢學生選課信息
[2]添加老師課程信息
[3]刪除老師課程信息
[4]返回主頁面
【請選擇】4
=========請選擇登錄頁面=========
[1]學生登錄
[2]教師登錄
[3]管理員登錄
[4]退出系統
【請選擇】1
=========歡迎登錄學生系統=========
請輸入賬號和密碼
請輸入賬號:wantin
請輸入密碼:123456
=========歡迎wantin同學=========
[1]查詢已選課程
[2]添加課程
[3]刪除所選課程
[4]返回主頁面
【請選擇】1
******所選課程信息******
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
請輸入所要查詢人的姓名:王艇
沒有該學生選課信息!!!!
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
=========歡迎wantin同學=========
[1]查詢已選課程
[2]添加課程
[3]刪除所選課程
[4]返回主頁面
【請選擇】3
【輸入學生姓名】王艇
【請輸入刪除的課程代碼】123
刪除失敗!!!!
=========歡迎wantin同學=========
[1]查詢已選課程
[2]添加課程
[3]刪除所選課程
[4]返回主頁面
【請選擇】2
【請輸入正確的課程代碼】123
請輸入學號:110
請輸入姓名:王艇
請輸入性別:男
選課成功!!!!
=========歡迎wantin同學=========
[1]查詢已選課程
[2]添加課程
[3]刪除所選課程
[4]返回主頁面
【請選擇】1
******所選課程信息******
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
請輸入所要查詢人的姓名:王艇
課程代碼:123 課程名稱:C語言 課程老師:王艇 選課學生:1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
=========歡迎wantin同學=========
[1]查詢已選課程
[2]添加課程
[3]刪除所選課程
[4]返回主頁面
【請選擇】4
=========請選擇登錄頁面=========
[1]學生登錄
[2]教師登錄
[3]管理員登錄
[4]退出系統
【請選擇】2
=========歡迎登錄教師系統=========
請輸入賬號和密碼
請輸入賬號:wantin
請輸入密碼:123456
=========歡迎wantin老師=========
[1]查詢學生選課信息
[2]添加老師課程信息
[3]刪除老師課程信息
[4]返回主頁面
【請選擇】1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
課程代碼:123 課程名稱:C語言 課程老師:王艇 選課學生:1
課程代碼:456 課程名稱:Java 課程老師:王艇 選課學生:0
課程代碼:789 課程名稱:PHP 課程老師:王艇 選課學生:0
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
=========歡迎wantin老師=========
[1]查詢學生選課信息
[2]添加老師課程信息
[3]刪除老師課程信息
[4]返回主頁面
【請選擇】4
=========請選擇登錄頁面=========
[1]學生登錄
[2]教師登錄
[3]管理員登錄
[4]退出系統
【請選擇】1
=========歡迎登錄學生系統=========
請輸入賬號和密碼
請輸入賬號:wantin
請輸入密碼:123456
=========歡迎wantin同學=========
[1]查詢已選課程
[2]添加課程
[3]刪除所選課程
[4]返回主頁面
【請選擇】2
【請輸入正確的課程代碼】456
請輸入學號:110
請輸入姓名:王艇
請輸入性別:男
選課成功!!!!
=========歡迎wantin同學=========
[1]查詢已選課程
[2]添加課程
[3]刪除所選課程
[4]返回主頁面
【請選擇】1
******所選課程信息******
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
請輸入所要查詢人的姓名:王艇
課程代碼:123 課程名稱:C語言 課程老師:王艇 選課學生:1
課程代碼:456 課程名稱:Java 課程老師:王艇 選課學生:1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
=========歡迎wantin同學=========
[1]查詢已選課程
[2]添加課程
[3]刪除所選課程
[4]返回主頁面
【請選擇】2
【請輸入正確的課程代碼】123
請輸入學號:112
請輸入姓名:王五
請輸入性別:男
選課成功!!!!
=========歡迎wantin同學=========
[1]查詢已選課程
[2]添加課程
[3]刪除所選課程
[4]返回主頁面
【請選擇】1
******所選課程信息******
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
請輸入所要查詢人的姓名:王艇
課程代碼:123 課程名稱:C語言 課程老師:王艇 選課學生:2
課程代碼:456 課程名稱:Java 課程老師:王艇 選課學生:1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
=========歡迎wantin同學=========
[1]查詢已選課程
[2]添加課程
[3]刪除所選課程
[4]返回主頁面
【請選擇】1
******所選課程信息******
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
請輸入所要查詢人的姓名:王五
課程代碼:123 課程名稱:C語言 課程老師:王艇 選課學生:2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
=========歡迎wantin同學=========
[1]查詢已選課程
[2]添加課程
[3]刪除所選課程
[4]返回主頁面
【請選擇】4
=========請選擇登錄頁面=========
[1]學生登錄
[2]教師登錄
[3]管理員登錄
[4]退出系統
【請選擇】2
=========歡迎登錄教師系統=========
請輸入賬號和密碼
請輸入賬號:wantin
請輸入密碼:123456
=========歡迎wantin老師=========
[1]查詢學生選課信息
[2]添加老師課程信息
[3]刪除老師課程信息
[4]返回主頁面
【請選擇】1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
課程代碼:123 課程名稱:C語言 課程老師:王艇 選課學生:2
課程代碼:456 課程名稱:Java 課程老師:王艇 選課學生:1
課程代碼:789 課程名稱:PHP 課程老師:王艇 選課學生:0
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
=========歡迎wantin老師=========
[1]查詢學生選課信息
[2]添加老師課程信息
[3]刪除老師課程信息
[4]返回主頁面
【請選擇】
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。