鑒于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;
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;
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)){p->stuNo[i][
0]=
'\0';p->stuName[i][
0]=
'\0';p->stuSex[i][
0]=
'\0';
puts(
"刪除成功!!!!");flag=
1; }} }p=p->next;}
if(
0 == flag) {
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;
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;}
}
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);
}
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);}
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);}
break;
case 3:
printf(
"=========歡迎%s同志=========\n",Account);
puts(
"[1]查詢學生所選課程信息");
puts(
"[2]修改選課信息");
puts(
"[3]返回主頁面");
scanf(
"%d",&in);Manager_Mng(Account, in);
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: checkAccountandPassword(phead, studentAccount,studentPassword,n);
break;
case 2: checkAccountandPassword(phead, teacherAccount,teacherPassword,n);
break;
case 3: 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]返回主頁面
課程代碼:123 課程名稱:C語言 課程老師:王艇 選課學生:0
課程代碼:456 課程名稱:Java 課程老師:王艇 選課學生: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
請輸入所要查詢人的姓名:王艇
=========歡迎wantin同學=========
[1]查詢已選課程
[2]添加課程
[3]刪除所選課程
[4]返回主頁面
【請選擇】4
=========請選擇登錄頁面=========
[1]學生登錄
[2]教師登錄
[3]管理員登錄
[4]退出系統
【請選擇】2
=========歡迎登錄教師系統=========
請輸入賬號和密碼
請輸入賬號:wantin
請輸入密碼:123456
=========歡迎wantin老師=========
[1]查詢學生選課信息
[2]添加老師課程信息
[3]刪除老師課程信息
[4]返回主頁面
課程代碼:123 課程名稱:C語言 課程老師:王艇 選課學生:1
課程代碼:456 課程名稱:Java 課程老師:王艇 選課學生: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
=========歡迎wantin同學=========
[1]查詢已選課程
[2]添加課程
[3]刪除所選課程
[4]返回主頁面
【請選擇】2
【請輸入正確的課程代碼】123
請輸入學號:112
請輸入姓名:王五
請輸入性別:男
選課成功!!!!
=========歡迎wantin同學=========
[1]查詢已選課程
[2]添加課程
[3]刪除所選課程
[4]返回主頁面
【請選擇】1
請輸入所要查詢人的姓名:王艇
課程代碼:123 課程名稱:C語言 課程老師:王艇 選課學生:2
=========歡迎wantin同學=========
[1]查詢已選課程
[2]添加課程
[3]刪除所選課程
[4]返回主頁面
【請選擇】1
請輸入所要查詢人的姓名:王五
=========歡迎wantin同學=========
[1]查詢已選課程
[2]添加課程
[3]刪除所選課程
[4]返回主頁面
【請選擇】4
=========請選擇登錄頁面=========
[1]學生登錄
[2]教師登錄
[3]管理員登錄
[4]退出系統
【請選擇】2
=========歡迎登錄教師系統=========
請輸入賬號和密碼
請輸入賬號:wantin
請輸入密碼:123456
=========歡迎wantin老師=========
[1]查詢學生選課信息
[2]添加老師課程信息
[3]刪除老師課程信息
[4]返回主頁面
課程代碼:123 課程名稱:C語言 課程老師:王艇 選課學生:2
課程代碼:456 課程名稱:Java 課程老師:王艇 選課學生:1
=========歡迎wantin老師=========
[1]查詢學生選課信息
[2]添加老師課程信息
[3]刪除老師課程信息
[4]返回主頁面
【請選擇】
總結
以上是生活随笔為你收集整理的基于C语言的学生选课系统的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。