課程管理系統(tǒng)
功能:假定有 n 門課程,每門課程有課程編號(hào),課程名稱,總學(xué)時(shí),學(xué)分,開(kāi)課學(xué)期
等信息。試設(shè)計(jì)一課程管理系統(tǒng),使之能提供以下功能:
1 對(duì)課程信息的錄入、修改、刪除功能;
2 按課程名排序后瀏覽;
3 按課程查詢、按學(xué)分查詢;
代碼如下:
struct info
{int number;//課程編號(hào)
char name[100];//課程名稱
int hours;//總學(xué)時(shí)
int credit;//學(xué)分
int semester;// 開(kāi)課學(xué)期
bool flag;//數(shù)據(jù)有效標(biāo)記,
};
這個(gè)結(jié)構(gòu)體是用以保存數(shù)據(jù),由整型變量 number 存儲(chǔ)課程編號(hào);大小為 100 字節(jié)的字符數(shù)組 name 存儲(chǔ)課程名稱;由整型變量 hours 存儲(chǔ)總學(xué)時(shí);由整型變量 credit 存儲(chǔ)學(xué)分;由整型變量 semester 存儲(chǔ)開(kāi)課學(xué)期;由布爾整型變量 flag 存儲(chǔ)數(shù)據(jù)有效標(biāo)記。
還有以下一些實(shí)現(xiàn)功能的結(jié)構(gòu)體:
struct info temp;//臨時(shí)中轉(zhuǎn)
struct info a[20];//數(shù)據(jù)存儲(chǔ)
struct info newdata; //modify 中,修改的數(shù)據(jù)存儲(chǔ)
struct info original;//del 中,刪除數(shù)據(jù)的判據(jù)
二.主函數(shù):代碼如下:
int main(void)//true
{long long t = 0;
FILE* fp;
if ((fp = fopen("info.dat", "rb+")) != NULL)
{fpos_t pos;//定義pos
fgetpos(fp, &pos);//獲取文件指針,寫入pos
fseek(fp, 0, SEEK_END);//文件指針指向末尾
t = ftell(fp);//獲取文件指針到文件頭部的字節(jié)大小
fsetpos(fp, &pos);//文件指針還原
fclose(fp);//釋放文件
}
n = t / size;
//以上實(shí)現(xiàn)了有效數(shù)據(jù)條數(shù)n的獲取
printf("有效數(shù)據(jù):%d條\n", n);
char c;//選項(xiàng)代碼
while (1)
{printf("\n\n\n\n");
printf(" student course management system \n");
printf("-----------------------------------------------------------------");
printf("\n\n");
printf(" 1 錄入信息 2 瀏覽所有信息(排序后) 3 查詢信息(名稱) \n");
printf(" 4 修改信息 5 刪除信息 6 查詢信息(學(xué)分) \n");
printf(" 0 exit system \n");
printf(" \n\n");
printf("------------------------------------------------------------------");
printf("\n please select:");
c = getchar();
switch (c)
{ case '0'://exit system
{ return 0;
}
case '1':
{ input();//1 錄入信息
getchar();
break;
}
case '2':
{ look();//2 瀏覽所有信息(排序后)
getchar();
break;
}
case '3':
{ QueryName();//3 查詢信息(名稱)
getchar();
break;
}
case '4':
{ modify();//4 修改信息
getchar();
break;
}
case '5':
{ getchar();
del();//5 刪除信息
getchar();//防止功能失效
break;
}
case '6':
{ QueryCredit();//6 查詢信息(學(xué)分)
getchar();
break;
}
default:
{ getchar();
printf("\ninput error,please try again:\n");
break;
}
}
}
return 0;
}
代碼如下:
void input(void)//1 錄入信息 true
{char ch;
while (1)
{printf("課程編號(hào)");
scanf("%d", &temp.number);
printf("課程名稱");
scanf("%s", &temp.name);
printf("總學(xué)時(shí)");
scanf("%d", &temp.hours);
printf("學(xué)分");
scanf("%d", &temp.credit);
printf("開(kāi)課學(xué)期");
scanf("%d", &temp.semester);
temp.flag = 1;
n++;//有效數(shù)據(jù)增加1條
copy3(n - 1);//由temp中寫入數(shù)組中
getchar();//接受換行符
printf("是否繼續(xù)錄入?[y/n]\n");
ch = getchar();
if (ch == 'n' || ch == 'N')
break;
}
writeToFile();//統(tǒng)一寫入文件info.dat
}
四.瀏覽信息void look(void)//2 瀏覽所有信息(排序后) true
{load();
//sort
for (int i = 0; i< n - 1; i++) {int k = i;// 最小元素的下標(biāo)
for (int j = i + 1; j< n; j++)
if (strcmp(a[k].name, a[j].name) >0)//從小到大排序
k = j;//如果a[k]>a[j],即有元素比我們認(rèn)為的最小元素更小,那就更新最小元素的下標(biāo)
if (k != i)
{//等效于三步交換法
copy1(i);
copy2(i, k);
copy3(k);
}
}
display_header();//表頭
display_all();//內(nèi)容
display_end();//表尾
}
五.查詢信息void QueryName(void)//3 查詢信息(名稱)true
{char ch;
char CName[100];//用于存儲(chǔ)課程的名稱
while (1)
{printf("請(qǐng)輸入課程名稱:");
scanf("%s", CName);
getchar();
load();
display_header();
for (int i = 0; i< n; i++)
{// printf("%d\n",i);
if (strcmp(a[i].name, CName) == 0)
{ printf("ture.\n");
copy1(i);
display();
}
}
display_end();
printf("是否繼續(xù)查詢?[y/n]\n");
scanf("%c", &ch);
if (ch == 'n' || ch == 'N')
break;
}
}
void QueryCredit(void)//6 查詢信息(學(xué)分) true
{char ch;
int mark;//用于存儲(chǔ)課程的學(xué)分
while (1)
{printf("請(qǐng)輸入課程學(xué)分:");
scanf("%d", &mark);
getchar();
load();
display_header();
for (int i = 0; i< n; i++)
{if (mark == a[i].credit)
{ copy1(i);
display();
}
}
display_end();
printf("是否繼續(xù)查詢?[y/n]\n");
ch = getchar();
if (ch == 'n' || ch == 'N')
break;
}
}
六.修改信息void modify(void)//4 修改信息
{struct info newdata;//modify中修改的數(shù)據(jù)存儲(chǔ)
int num;
load();//讀原文件info.dat
look();
printf("用課程編號(hào)來(lái)確定修改的數(shù)據(jù)行:");
scanf("%d", &num);
getchar();
printf("\n\n");
printf(" student course info \n");
printf("------------------------------------------------------------------\n");
printf("你想修改什么?\n");
printf("1.課程名稱 2.總學(xué)時(shí) 3.學(xué)分\n");
printf("4.開(kāi)課學(xué)期\n");
printf("------------------------------------------------------------------");
printf("\n please select:");
char c = getchar();
while (c >'4' || c< '1')
{printf("\n輸入錯(cuò)誤,重試");
c = getchar();
}
getchar();
switch (c)
{case '1'://1.課程名稱
{printf("請(qǐng)輸入新名稱:");
gets(newdata.name);
for (int i = 0; i< n; i++)
if (a[i].number == num)
strcpy(a[i].name, newdata.name);
break;
}
case '2'://2.總學(xué)時(shí)
{printf("請(qǐng)輸入新總學(xué)時(shí):");
scanf("%d", &newdata.hours);
for (int i = 0; i< n; i++)
if (a[i].number == num)
a[i].hours = newdata.hours;
break;
}
case '3'://3.學(xué)分
{printf("請(qǐng)輸入新學(xué)分:");
scanf("%d", &newdata.credit);
for (int i = 0; i< n; i++)
if (a[i].number == num)
a[i].credit = newdata.credit;
break;
}
case '4'://4.開(kāi)課學(xué)期
{printf("請(qǐng)輸入新開(kāi)課學(xué)期:");
scanf("%d", &newdata.semester);
for (int i = 0; i< n; i++)
if (a[i].number == num)
a[i].semester = newdata.semester;
break;
}
}
writeToFile();
}
七.刪除信息void del(void)//5刪除信息
{struct info original;//刪除數(shù)據(jù)的判據(jù)
long long t = 0;
FILE* ftemp;
load();//讀原文件info.dat
printf("\n\n");
printf(" student course info \n");
printf("------------------------------------------------------------------\n");
printf("你想通過(guò)哪種方式來(lái)查找需要?jiǎng)h除的記錄?\n");
printf("1.課程編號(hào) 2.課程名稱 3.總學(xué)時(shí)\n");
printf("4.學(xué)分 5.開(kāi)課學(xué)期\n");
printf("-----------------------------------------------------------------");
printf("\n please select:");
char c = getchar();
while (c >'5' || c< '1')
{printf("\n輸入錯(cuò)誤,重試");
c = getchar();
}
getchar();
switch (c)
{case '1'://1.課程編號(hào)
{ printf("請(qǐng)輸入課程編號(hào):");
scanf("%d", &original.number);
for (int i = 0; i< n; i++)
if (a[i].number == original.number)
a[i].flag = false;
break;
}
case '2'://2.課程名稱
{ printf("請(qǐng)輸入課程名稱:");
gets(original.name);
for (int i = 0; i< n; i++)
if (strcmp(a[i].name, original.name) == 0)
a[i].flag = false;
break;
}
case '3'://3.總學(xué)時(shí)
{ printf("請(qǐng)輸入總學(xué)時(shí):");
scanf("%d", &original.hours);
for (int i = 0; i< n; i++)
if (a[i].hours == original.hours)
a[i].flag = false;
break;
}
case '4'://4.學(xué)分
{ printf("請(qǐng)輸入學(xué)分:");
scanf("%d", &original.credit);
for (int i = 0; i< n; i++)
if (a[i].credit == original.credit)
a[i].flag = false;
break;
}
case '5'://5.開(kāi)課學(xué)期
{ printf("請(qǐng)輸入開(kāi)課學(xué)期:");
scanf("%d", &original.semester);
for (int i = 0; i< n; i++)
if (a[i].semester == original.semester)
a[i].flag = false;
break;
}}
if ((ftemp = fopen("temporary.dat", "wb")) == NULL)//寫打開(kāi)臨時(shí)文件temporary.dat
{printf("Open the file failure...\n");
exit(EXIT_SUCCESS);
}
for (int i = 0; i< n; i++)
if (a[i].flag == false)
continue;
else
fwrite(&a[i], size, 1, ftemp);//不是則將這寫入臨時(shí)文件temporary.dat
fpos_t pos;//定義pos
fgetpos(ftemp, &pos);//獲取文件指針,寫入pos
fseek(ftemp, 0, SEEK_END);//文件指針指向末尾
t = ftell(ftemp);//獲取文件指針到文件頭部的字節(jié)大小
fsetpos(ftemp, &pos);//文件指針還原
fclose(ftemp);
n = t / size;//因?yàn)槲募淖儎?dòng),更新n的值
int back1 = remove("info.dat");
int back2 = rename("temporary.dat", "info.dat");//將臨時(shí)文件名改為原文件名
if (!back1 && !back2)
printf("成功!\n");
else printf("%d %d\n失敗!\n", back1, back2);
}
八.對(duì)文件的操作void writeToFile(void)//true
{FILE* fp;
if ((fp = fopen("info.dat", "wb")) == NULL)
{printf("無(wú)法打開(kāi)此文件\n");
exit(EXIT_SUCCESS);
}
for (int i = 0; i< n; i++)
{if (fwrite(&a[i], size, 1, fp) != 1)
{ printf("file write error.\n");
}
}
fclose(fp);
}
代碼運(yùn)行檢測(cè)及結(jié)果你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
分享題目:C語(yǔ)言--課程管理信息系統(tǒng)-創(chuàng)新互聯(lián)
轉(zhuǎn)載來(lái)于:http://vcdvsql.cn/article44/ppgee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、網(wǎng)站設(shè)計(jì)公司、云服務(wù)器、企業(yè)網(wǎng)站制作、微信公眾號(hào)、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容
移動(dòng)網(wǎng)站建設(shè)知識(shí)