?? 作者:Linux猿
?? 簡介:CSDN博客專家??,華為云享專家??,Linux、C/C++、云計算、物聯(lián)網(wǎng)、面試、刷題、算法盡管咨詢我,關(guān)注我,有問題私聊!
?? 關(guān)注專欄:C/C++課程設(shè)計100例?優(yōu)質(zhì)好文持續(xù)更新中……??????
?? 歡迎小伙伴們點贊??、收藏?、留言??
目錄
一、主要功能需求
二、主要設(shè)計思路
三、功能實現(xiàn)
3.1?課程信息瀏覽
3.2?課程信息錄入
3.3?課程信息刪除
3.4?課程信息修改
3.5?選修課程
四、總結(jié)
?本篇文章主要對「學(xué)生選課管理系統(tǒng)」進行詳細的講解,包括對功能需求、設(shè)計思路、主要功能實現(xiàn)等的講解。
一、主要功能需求
(1)支持課程信息瀏覽;
(2)支持課程信息查詢;
(3)支持課程信息錄入;
(4)支持課程信息刪除;
(5)支持課程信息修改;
(6)支持課程信息寫入文件;
(7)支持選修課程;
(8)支持查看選修課程;
(9)支持刪除選修課程;
(10)支持對選修課程的存儲,支持文件的寫入和讀取。
二、主要設(shè)計思路
學(xué)生選課管理系統(tǒng)主要設(shè)計流程圖如下所示。
如上圖所示,列出了主要功能的程序流程圖。
三、功能實現(xiàn)
這里對主要功能實現(xiàn)進行詳細講解。
3.1?課程信息瀏覽
課程信息瀏覽功能實現(xiàn)對所有選修課程的展示,代碼實現(xiàn)如下所示。
// 瀏覽課程信息
void viewCourse(LinkList *head)
{
while (true) {
system("cls");
int x = sx, y = sy;
if (head->next == NULL) {
getCoord(x, ++y); printf("沒有課程信息!");
} else {
LinkList *p = head;
while (p->next != NULL) {
p = p->next;
printDivideLine(x - 1, ++y, 40);
getCoord(x, ++y); printf("課程編號:%s", p->ID);
getCoord(x, ++y); printf("課程名稱:%s", p->name);
getCoord(x, ++y); printf("課程性質(zhì):%s", p->property);
getCoord(x, ++y); printf("實驗或上機學(xué)時:%d", p->experiment_hours);
getCoord(x, ++y); printf("總學(xué)時:%d", p->hours);
getCoord(x, ++y); printf("授課學(xué)時:%d", p->teach_hours);
getCoord(x, ++y); printf("學(xué)分:%d", p->credit);
getCoord(x, ++y); printf("開課:%s", p->course);
printDivideLine(x - 1, ++y, 40);
}
}
returnMenu(x, ++y);
break;
}
}
選修課程通過鏈表存儲,存儲的課程信息包括:課程編號、課程名稱、課程性質(zhì)、實驗或上機學(xué)時、總學(xué)時、授課學(xué)時、學(xué)分以及開課。?
3.2?課程信息錄入
課程信息錄入功能實現(xiàn)對選修課程信息的添加,代碼實現(xiàn)如下所示。
void addCourse(LinkList *end)
{
while (true) {
system("cls");
int x = sx, y = sy;
LinkList *in = (LinkList*)malloc(sizeof(LinkList));
getCoord(x, ++y); printf("請輸入課程編號: ");
scanf("%s", in->ID);
getCoord(x, ++y); printf("請輸入課程名稱: ");
scanf("%s", in->name);
getCoord(x, ++y); printf("請輸入課程性質(zhì): ");
scanf("%s", in->property);
getCoord(x, ++y); printf("請輸入實驗或上機學(xué)時: ");
scanf("%d",&in->experiment_hours);
getCoord(x, ++y); printf("請輸入授課學(xué)時: ");
scanf("%d",&in->teach_hours);
getCoord(x, ++y); printf("請輸入學(xué)分: ");
scanf("%d",&in->credit);
getCoord(x, ++y); printf("請輸入總學(xué)時: ");
scanf("%d",&in->hours);
getCoord(x, ++y); printf("請輸入開課: ");
scanf("%s", in->course);
end->next = in;
in->next = NULL;
end = in;
char ch = continueMenu(x, y += 2);
if (ch == 'Q') break;
}
}
如上述代碼所示,錄入的選修課程信息包括:課程編號、課程名稱、課程性質(zhì)、實驗或上機學(xué)時、授課學(xué)時、學(xué)分以及總學(xué)時。
3.3?課程信息刪除
課程信息刪除功能實現(xiàn)對選修課程信息的刪除,代碼實現(xiàn)如下所示。
void deleteCourse(LinkList *head)
{
system("cls");
int x = sx, y = sy;
LinkList *pre = head;
LinkList *p = head->next;
getCoord(x, ++y); printf("請輸入將要刪除的課程編號: ");
char id[30];
scanf("%s", id);
bool flag = false;
while (p != NULL) {
if (!strcmp(p->ID, id)) {
flag = true;
break;
}
pre = p;
p = p->next;
}
if (flag) {
pre->next = pre->next->next;
getCoord(x, ++y); printf("刪除課程信息成功!");
} else {
getCoord(x, ++y); printf("未查找到課程信息!");
}
returnMenu(x, ++y);
}
如上代碼所示,根據(jù)課程編號刪除課程信息,因為選課信息是通過鏈表存儲,所以記錄待刪除節(jié)點的前一個節(jié)點,直接執(zhí)行:
pre->next = pre->next->next;
即可。如果課程編號不存在,則輸出“未查找到課程信息!”。?
3.4?課程信息修改
課程信息修改功能實現(xiàn)選修課程信息的修改,代碼實現(xiàn)如下所示。
void modifyCourse(LinkList *head)
{
system("cls");
int x = sx, y = sy;
LinkList *p = head->next;
getCoord(x, ++y); printf("請輸入將要修改的課程編號: ");
char id[30];
scanf("%s", id);
bool flag = false;
while (p != NULL) {
if (!strcmp(p->ID, id)) {
flag = true;
break;
}
p = p->next;
}
if (flag) {
getCoord(x, ++y); ++y; printf("請輸入要修改的項:");
getCoord(x, ++y); ++y; printf("1) 課程編號");
getCoord(x, ++y); ++y; printf("2) 課程名稱");
getCoord(x, ++y); ++y; printf("3) 課程性質(zhì)");
getCoord(x, ++y); ++y; printf("4) 實驗或上機學(xué)時");
getCoord(x, ++y); ++y; printf("5) 授課學(xué)時");
getCoord(x, ++y); ++y; printf("6) 學(xué)分");
getCoord(x, ++y); ++y; printf("7) 總學(xué)時");
getCoord(x, ++y); ++y; printf("8) 開課");
getCoord(x, ++y); ++y; printf("請輸入:");
int id;
scanf("%d", &id);
switch (id) {
case 1:
getCoord(x, ++y); ++y; printf("請輸入課程編號:");
scanf("%s", p->ID);
break;
case 2:
getCoord(x, ++y); ++y; printf("請輸入課程名稱:");
scanf("%s", p->name);
break;
case 3:
getCoord(x, ++y); ++y; printf("請輸入課程性質(zhì):");
scanf("%s", p->property);
break;
case 4:
getCoord(x, ++y); ++y; printf("請輸入實驗或上機學(xué)時:");
scanf("%d", &p->experiment_hours);
break;
case 5:
getCoord(x, ++y); ++y; printf("請輸入授課學(xué)時:");
scanf("%d", &p->teach_hours);
break;
case 6:
getCoord(x, ++y); ++y; printf("請輸入學(xué)分:");
scanf("%d", &p->credit);
break;
case 7:
getCoord(x, ++y); ++y; printf("請輸入總學(xué)時:");
scanf("%d", &p->hours);
break;
case 8:
getCoord(x, ++y); ++y; printf("請輸入開課:");
scanf("%s", p->course);
break;
}
getCoord(x, ++y); printf("修改課程信息成功!");
} else {
getCoord(x, ++y); printf("未查找到課程信息!");
}
returnMenu(x, ++y);
}
?如上代碼所示,實現(xiàn)了對已有選課信息的修改。首先,需要輸入課程編號,根據(jù)課程編號在選修課程列表中進行查找,如果找到對應(yīng)選修課程信息,展示可以修改的內(nèi)容,選擇后修改對應(yīng)的內(nèi)容。否則,如果查找不到對應(yīng)課程,則輸出“未查找到課程信息!”。
3.5?選修課程
選修課程功能實現(xiàn)對選修課程的選擇,代碼實現(xiàn)如下所示。
void chooseCourse(LinkList *head)
{
while (true) {
system("cls");
int x = sx, y = sy;
getCoord(x, ++y); printf("請輸入課程編號: ");
char id[30];
scanf("%s", id);
bool flag = false;
LinkList *p = head->next;
while (p != NULL) {
if (!strcmp(p->ID, id)) {
flag = true;
break;
}
}
if (flag) {
getCoord(x, ++y); printf("選修課程成功!");
printCourse(p, x, ++y);
addCourseToFile(p);
} else {
getCoord(x, ++y); printf("未查詢到課程信息!");
}
y += 8;
char ch = continueMenu(x, ++y);
if (ch == 'Q') break;
}
}
如上代碼所示,選修課程是對在選修課程列表里的課程進行選擇,選修課程是依據(jù)課程編號進行選擇,在選修課程列表中根據(jù)課程編號查找,將其添加到已選課列表里。如果未查詢到選修課程信息,則輸出“未查詢到課程信息”。
四、總結(jié)
本篇文章實現(xiàn)了「學(xué)生選課管理系統(tǒng)」,主要是對學(xué)生選課進行管理,實現(xiàn)了對選課信息的錄入、查詢、瀏覽以及刪除等操作,學(xué)生可以根據(jù)錄入的選課信息選修課程。
?????? 訂閱專欄「C/C++/Java課程設(shè)計100例」后可聯(lián)系作者獲取源碼 ??????文章來源:http://www.zghlxwxcb.cn/news/detail-501827.html
?? 感覺有幫助記得「一鍵三連」支持下哦!有問題可在評論區(qū)留言??,感謝大家的一路支持!??猿哥將持續(xù)輸出「優(yōu)質(zhì)文章」回饋大家!????????????????文章來源地址http://www.zghlxwxcb.cn/news/detail-501827.html
到了這里,關(guān)于C/C++ 學(xué)生選課管理系統(tǒng)(源碼 + 詳解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!