鑒于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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。