導航:首頁 > 萬維百科 > 課程網站的設計與實現

課程網站的設計與實現

發布時間:2020-10-13 14:40:07

1、c++ 課程管理系統設計與實現

這個做過好久了,找不到當時成型的那個了,給你這個看看吧,沒運行,你把沒用的刪掉,改改,自己運行試試
#include <stdio.h>
#include<stdlib.h>
#include<string.h>

int savedTag=0;

struct student
{ char name[20];
int num;
char sex[4];
float math,english,history,SQL,C;
float sum;
float avg;
int order;
};

typedef struct Node
{ struct data;
struct Node *next;
}Node,*Link;

void menu()
{printf (「*******************************************************************\n」);
printf (「\t\t\t\t\t\t1增加學生資料\t\t\t\t\t\t\t\t\t\2刪除學生資料\n」);
printf (「\t\t\t\t\t\t3查詢學生資料\t\t\t\t\t\t\t\t\t\4修改學生資料\n」);
printf (「\t\t\t\t\t\t5保存學生資料\t\t\t\t\t\t\t\t\t\6顯示學生資料\n」);
printf (「\t\t\t\t\t\t7對學生資料進行分類\t\t\t\t\t\t\8從記錄文件中讀取學生資料\n」)
printf (「\t\t\t\t\t\t9新建學生資料文件\t\t\t\t\t\t\t\0推出系統\n」);
printf (「*******************************************************************\n」);
}

void printstart()
{printf("--------------------------------------------------------------------\n");}

void Wrong()
{printf("\n====>提示:輸入錯誤!\n");}

void Nofind()
{printf("\n====>提示:沒有找到該學生!\n");}

void printc()
{printf("學號\t姓名\t性別\t數學成績\t英語成績\t歷史成績\t專業成績\tC語言成績\t總分\t平均分\t名次\n");}

void printe()
{printf("%-12s%\t%s\s%s\s%f\t%f\t%f\t%f\t%f\t%f\t%f\t%d\n",
p->data.num,p->data.name,p->data.sex,p->data.math,p->data.english,p->data.history,p->data.SQL,p->data.C,p->data.sum,p->data.avg,p->data.order);}

Node *Locate(Link1,char findmess[],char nameornum[])
/*該指針函數用於定位鏈表中符合要求的節點,並返回指針(即從鏈表的某個當前節點查找跟findmess中名字相同的信息節點)*/
/*第一個參數l表示指向的當前節點*/

{Node *r; /* 指向鏈表中的某個節點 */
if(strcmp(nameornum,"name")==0) /* 按姓名查詢 */ /*核對本函數傳入的第三個參數(數組)是否為字元串"name" */
{
r=l->next; /*指向(當前節點的)下一個節點 */

while(r!=NULL) /*如果下個節點不為空*/

{
if(strcmp(r->data.name,findmess)==0) /比較"下個"節點的數據域的"名字"是否為傳入的第二個參數指定的名字*/

return r; /*如果找到了匹配的名字則返回該節點*/

r=r->next; /*否則繼續查找下個節點,直到鏈表的結尾*/

}
}

【else if(strcmp(nameornum,"num")==0)]】 【到底是那個語句?? 類型不對能行嗎?是要跟「num」比較,還是跟num的數值比較? 】
else if(num==(int)nameornum) /*按學號查詢*/
{r=1->next;
while(r!=NULL)
{if(strcmp(r->data.num,findmess)==0)
return r;
r=r->next;
}
}
【if(strcmp(nameornum,"order")==0) 】
else if(order==(int)nameiornum) /*按名次查詢*/
{r=1->next;
while(r!=NULL)
{if(strcmp(r->data.order,findmess)==0)
return r;
r=r->next;
}
}
return 0;
}

void Add(Link l) /* 增加學生 */
{
Node *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next; /*否則繼續查找下個節點,直到鏈表的結尾(將指針置於最末尾 )*/
while(1)
{
printf("請你輸入學號(以'0'返回上一級菜單");
scanf("%s",num);
if(num==0) /*學號輸入遇0結束*/
break;
while(s)
{
if(s->data.num==num)
{
printf("=====>提示:學號為'%s'的學生已經存在,若要修改請你選擇'4 修改'!\n",num);
printstart();
printc();
printe(s);
printstart();
printf("\n");
return;
}
s=s->next; /*否則繼續查找下個節點,直到鏈表的結尾(將指針置於最末尾 )*/
}

p=(Node *)malloc(sizeof(Node)); /*動態分配內存*/

p->data.num=num
printf("請你輸入姓名:");
scanf("%s",p->data.name);
getchar();
printf("請你輸入性別:");
scanf("%s",p->data.sex);
getchar();
printf("請你輸入數學成績:");
scanf("%f",&p->data.math);
getchar();
printf("請你輸入英語成績:");
scanf("%f",&p->data.english);
getchar();
printf("請你輸入歷史成績:");
scanf("%f",&p->data.history);
getchar();
printf("請輸入資料成績:");
scanf("%f",&p->data.SQL);
getchar();
printf("請輸入專業成績:");
scanf("%f",&p->data.C);
getchar(); /* 信息輸入已經完成 */
s->sum=s->math+s->english+s->SQL+s->C+s->history; /*求總成績*/
s->avg=s->sum/5; /*求平均值*/
p->next=NULL;
r->next=p;
r=p;
savedTag=1; /*改變存儲標志*/

}
}

void Qur(Link l) /* 查詢學生 */
{
int sel;
char findmess[20]; 【這里定義的這個findmess跟前面的指針函數沒關系吧?】
Node *p;

if(!l->next)
{
printf("\n=====>提示:沒有資料可以查詢!\n");
return;

}
printf("\n=====>1按學號查找\n=====>2按姓名查找\n====>3按名次查找\n");
scanf("%d",&sel);
if(sel==1) /* 按學號 查找*/
{
printf("請你輸入要查找的學號:");
scanf("%d",&(int)findmess); 【學號是int類型的,所以把findmess轉換為int類型】
p=Locate(l,findmess,"num"); 【原函數中的第三個參數的類型為char,那麼這里寫「num」對嗎?
加了雙引號,代表代表這里是字元串而不是num的int類型的數值,是么?】
if(p)
{
printf("\t\t\t\t查找結果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else if(sel==2) /* 按姓名查找 */
{
printf("請你輸入要查找的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
printf("\t\t\t\t查找結果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else if(sel==3) /* 按名次查找 */
{
printf("請你輸入要查找的名次:");
scanf("%d",&(int)findmess);
p=Locate(l,findmess,"order");
if(p)
{
printf("\t\t\t\t查找結果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else
Wrong();

}

void Del(Link l) /* 刪除學生信息 */
{
int sel,s;
Node *p,*r;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:沒有資料可以刪除!\n");
return;
}
printf("\n=====>1按學號刪除\n=====>2按姓名刪除\n====>3按名次刪除\n");
scanf("%d",&sel);
if(sel==1)
{
printf("請你輸入要刪除的學號:");
scanf("%s",findmess);
printf("\n====>警告:確定刪除信息?(y\n):") ;
scanf("%c",&s);
if(s=='y'||s=='Y')
{p=Locate(l,findmess,"num");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:該學生已經成功刪除!\n");
savedTag=1;
}
else
Nofind();
}
else exit(0);
}

else if(sel==2)
{
printf("請你輸入要刪除的姓名:");
scanf("%s",findmess);
printf("\n====>警告:確定刪除信息?(y\n):") ;
scanf("%c",&s);
if(s=='y'||s=='Y')
{p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:該學生已經成功刪除!\n");
savedTag=1;
}
else
Nofind();
}
else exit(0);
}

else if(sel==3)
{
printf("請你輸入要刪除的名次:");
scanf("%d",&findmess);
printf("\n====>警告:確定刪除信息?(y\n):") ;
scanf("%c",&s);
if(s=='y'||s=='Y')
{p=Locate(l,findmess,"order");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:該學生已經成功刪除!\n");
savedTag=1;
}
else
Nofind();
}
else exit(0);
}
else
Wrong();
}

void Modify(Link l)
{ int sel,s;
Node *p;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:沒有資料可以修改!\n");
return;
}
printf("\n=====>1按學號修改\n=====>2按姓名修改\n====>3按名次修改\n");
scanf("%d",&sel);
if(sel==1)
{printf("請你輸入要修改的學生學號:");
scanf("%d",&(int)findmess);
printf("\n====>警告:確定修改信息?(y\n):") ;
scanf("%c",&s);
if(s=='y'||s=='Y')
{p=Locate(l,findmess,"num");
if(p)
{
printf("請你輸入新學號:");
scanf("%d",&p->data.num);
printf("請你輸入新姓名:");
scanf("%s",p->data.name);
getchar();
printf("請你輸入新性別:");
scanf("%s",p->data.sex);
printf("請你輸入新的數學成績:");
scanf("%f",&p->data.math);
getchar();
printf("請你輸入新的英語成績:");
scanf("%f",&p->data.english);
getchar();
printf("請你輸入新的歷史成績:");
scanf("%f",&p->data.history);
printf("請輸入新的資料成績:");
scanf("%f",&p->data.SQL);
printf("請你輸入新的專業成績:");
scanf("%f",&p->data.C);
printf("\n=====>提示:資料修改成功!\n");
s->sum=s->math+s->english+s->SQL+s->C+s->history;
s->avg=s->sum/5;
savedTag=1;
}
else
Nofind();
}
else exit(0) ;
}

else if(sel==2)
{printf("請你輸入要修改的學生姓名:");
scanf("%s",findmess);
printf("\n====>警告:確定修改信息?(y\n):") ;
scanf("%c",&s);
if(s=='y'||s=='Y')
{p=Locate(l,findmess,"name");
if(p)
{
printf("請你輸入新姓名:");
scanf("%s",p->data.name);
getchar();
printf("請你輸入新學號:");
scanf("%d",&p->data.num);
printf("請你輸入新性別:");
scanf("%s",p->data.sex);
printf("請你輸入新的數學成績:");
scanf("%f",&p->data.math);
getchar();
printf("請你輸入新的英語成績:");
scanf("%f",&p->data.english);
getchar();
printf("請你輸入新的歷史成績:");
scanf("%f",&p->data.history);
printf("請輸入新的資料成績:");
scanf("%f",&p->data.SQL);
printf("請你輸入新的專業成績:");
scanf("%f",&p->data.C);
printf("\n=====>提示:資料修改成功!\n");
s->sum=s->math+s->english+s->SQL+s->C+s->history;
s->avg=s->sum/5;
savedTag=1;
}
else
Nofind();
}
else exit(0) ;
}

else if(sel==3)
{printf("請你輸入要修改的學生名次:");
scanf("%d",&(int)findmess);
printf("\n====>警告:確定修改信息?(y\n):") ;
scanf("%c",&s);
if(s=='y'||s=='Y')
{p=Locate(l,findmess,"order");
if(p)
{
printf("請你輸入新學號:");
scanf("%d",&p->data.num);
printf("請你輸入新姓名:");
scanf("%s",p->data.name);
getchar();
printf("請你輸入新性別:");
scanf("%s",p->data.sex);
printf("請你輸入新的數學成績:");
scanf("%f",&p->data.math);
getchar();
printf("請你輸入新的英語成績:");
scanf("%f",&p->data.english);
getchar();
printf("請你輸入新的歷史成績:");
scanf("%f",&p->data.history);
printf("請輸入新的資料成績:");
scanf("%f",&p->data.SQL);
printf("請你輸入新的專業成績:");
scanf("%f",&p->data.C);
printf("\n=====>提示:資料修改成功!\n");
s->sum=s->math+s->english+s->SQL+s->C+s->history;
s->avg=s->sum/5;
savedTag=1;
}
else
Nofind();
}
else exit(0) ;
}
}

/*************************************************************************************/

void Disp(Link l)
{
int count=0;
Node *p;
p=l->next;

if(!p)
{
printf("\n=====>提示:沒有資料可以顯示!\n");
return;
}
printf("\t\t\t\t顯示結果\n");
printstart();
printc();
printf("\n");
while(p)
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
}

/*************************************************************************************/

void Tongji(Link l)
{
Node *pm,*pe,*pc; /* 用於指向分數最高的接點 */
Node *r=l->next;
if(!r)
{
printf("\n=====>提示:沒有資料可以統計!\n");
return ;
}
pm=pe=pc=r;
while(r!=NULL)
{
if(r->data.age>=pc->data.age)
pc=r;
if(r->data.birth>=pm->data.birth)
pm=r;
if(r->data.tele>=pe->data.tele)
pe=r;

r=r->next;
}

}

/*************************************************************************************/

void Sort(Link l)
{
Link ll;
Node *p,*rr,*s;

ll=(Link)malloc(sizeof(Node)); /* 用於做新的連表 */
ll->next=NULL;

if(l->next==NULL)
{
printf("\n=====>提示:沒有資料可以排序!\n");
return ;
}
p=l->next;
while(p)
{
s=(Node*)malloc(sizeof(Node)); /* 新建接點用於保存信息 */
s->data=p->data;
s->next=NULL;

rr=ll;
while(rr->next!=NULL )
rr=rr->next;
if(rr->next==NULL)
rr->next=s;
else
{
s->next=rr->next;
rr->next=s;
}
p=p->next;
}
free(l);
l->next=ll->next;
printf("\n=====>提示:排序已經完成!\n");
}

/*************************************************************************************/

void Save(Link l)
{
FILE* fp;
Node *p;
int flag=1,count=0;
fp=fopen("c:\\student","wb");
if(fp==NULL)
{
printf("\n=====>提示:重新打開文件時發生錯誤!\n");
exit(1);
}
p=l->next;

while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p->next;
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
{
printf("\n=====>提示:文件保存成功.(有%d條記錄已經保存.)\n",count);
shoudsave=0;
}
fclose(fp);
}

/*************************************************************************************/

void main()
{
Link l;/* 連表 */
FILE *fp; /* 文件指針 */
int sel;
char ch;
char jian;

int count=0;
Node *p,*r;
printf("\t\t\t\t學生成績管理系統\n\t\t\t\t-------信息工程學院通信XXX\n");
l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l;

fp=fopen("C:\\student","rb");
if(fp==NULL)
{
printf("\n=====>提示:文件還不存在,是否創建?(y/n)\n");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
fp=fopen("C:\\student","wb");
else
exit(0);
}
printf("\n=====>提示:文件已經打開,正在導入記錄......\n");

while(!feof(fp))
{
p=(Node*)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp)) /* 將文件的內容放入接點中 */
{
p->next=NULL;
r->next=p;
r=p; /* 將該接點掛入連中 */
count++;
}
}

fclose(fp); /* 關閉文件 */
printf("\n=====>提示:記錄導入完畢,共導入%d條記錄.\n",count);

while(1)
{
menu();
printf("請你選擇操作:");
scanf("%d",&sel);

if(sel==0)
{
if(shoudsave==1)
{ getchar();
printf("\n=====>提示:資料已經改動,是否將改動保存到文件中(y/n)?\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(l);
}
printf("\n=====>提示:你已經退出系統,再見!\n");
break;
}
switch(sel)
{
case 1:Add(l);break; /* 增加學生 */
case 2el(l);break;/* 刪除學生 */
case 3ur(l);break;/* 查詢學生 */
case 4:Modify(l);break;/* 修改學生 */
case 5:Save(l);break;/* 保存學生 */
case 9:printf("\t\t\t==========幫助信息==========\n");break;
default: Wrong();getchar();break;
}
}
}

2、網路課堂系統的設計與實現

同學課題請自己好好做

3、Java課程網站設計與實現

開題報告
題 目:Java課程網站設計與實現

學 院:xx

專 業:xx

學生姓名:xx

指導教師:xx

日 期:xx-xx-xx
設計(論文)的技術路線及預期目標:
作為課程設計,主要目的是希望通過該系統的設計開發,將所學知識真正的應用於實踐當中,培養實際動手能力。並在設計實踐過程中,學習到更深的知識,掌握先進的技術。以此來增強對一個系統設計的整體認識,熟悉軟體開發過程,更深刻的理解軟體工程的知識,熟悉資料庫的設計與實現(Oracle),學習和掌握面向對象的分析方法(UML),利用MVC結構來開發高效率、高性能的Web應用程序,及面向對象的程序設計方法(以java語言實現)。

本次課題研究的主要內容是人事管理的需求分析和設計,最終完成一個人事管理系統。

課題進度計劃:

我擬訂將該研究過程劃分為三個階段,分別為前期、中期和後期。在前期階段(2—3周),主要做一些准備工作,如熟悉開發環境,認識J2EE架構,學習JAVA語言,MVC架構,收集一些有助於課題研究的資料,並試著寫相關的程序。在該階段需要完成的主要任務是「需求分析」,提出「概要設計方案」。

在中期階段(4—6周),對項目塊進行研究、實驗,本階段是整個研究、設計過程中的一個很重要的時期,也是對整個系統進行詳細設計和編碼,最後基本完成整個系統的製作任務。

後期階段(1—3周),該階段主要對整個系統進行集成和測試,發現系統存在的問題和有那些缺陷,並進行總結和分析,為將來的工作積累經驗和教訓。

我相信,通過在以上幾個階段中的努力工作及老師的辛勤指導,最後一定能做成電子政務檔案管理系統,完成課題研究任務。

我們也希望通過這次課題研究的機會,深層次的了解Java語言的開發及JavaBean和Jsp的使用技巧及MVC構架,掌握先進的軟體設計、管理、開發方法。

畢業設計(論文)的主要內容:

本次課題研究的主要內容是人事管理的需求分析和設計,最終完成一個人事管理系統。

在研究過程中,我將應用基於J2EE中的MVC構架技術來實現我的人事系統。擬訂將該系統劃分為三層,首先通過HTML向客戶展示被請求信息的表層(Represent Tier),我們用Java Servlet和JavaServer Page及JSTL來實現;然後是控制邏輯層(Control Logic Tier),它包含了一些在Struts體系結構上運行的組件;最後是資料庫層(Database Tier),用於永久性存儲數據。

公司管理模塊實現了公司的增加、刪除、修改、查詢等功能。

職位管理模塊實現了職位的增加、刪除、修改、查詢等功能。工作類型管理模塊實現了工作類型的增加、刪除、修改、查詢等功能。部門管理模塊實現了部門的增加、刪除、修改、查詢等功能。

員工管理模塊實現了增加、刪除、修改、查詢等功能。

檔案管理系統的系統功能圖:

在過去的很大一部分時間里都在熟悉將要採用的開發環境,如今已基本掌握了各開發工具和所必須的知識。針對課題研究對象,在不同的方面進行了研究,如:

需求分析:人事管理系統的主要作用是為用戶管理不同公司、不同部門的職工,方便用戶的查詢、匯總及分析。針對不同的用戶,人事管理系統有不同的功能表現。本系統為用戶提供對公司人事的管理,具體包括的功能有職位管理、工作類型管理、部門管理、公司管理、員工管理及操作資料庫的實現。本系統需要實現以下功能:

1、 公司管理:用戶可以增加公司的類別,2、 針對不同3、 類別的公司或者分公司,4、 系統可以按公司類別進行處理。通過公司區分不同5、 的用戶。

6、 職位管理:用戶可以為本系統的不同7、 公司職工增加職位,8、 來具體區分不同9、 公司的職工的職位類別。

10、 工作類型管理:用戶可以為本系統增加工作類型管理,11、 針對不同12、 職工的工作類型進行管理,13、 來區分職工的工作類型。

14、 部門管理:用戶可以為本系統增加部門,15、 包括修改、查看、刪除、查詢等操作。針對不同16、 公司的部門進行管理,17、 建立本公司的部門結構。

18、 員工管理:用戶可以為本系統增加員工。針對公司的某部門的員工進行管理,19、 建立本公司某部門的職工管理模塊。

系統設計:在大家的努力下,我們現在對整個網上圖書銷售系統的框架基本達成了一定的共識,具體內容將在詳細的設計書中進行描述。

資料庫設計:根據對系統的認識和分析,我們已開始設計符合系統要求的後台資料庫系統。如:公司信息{公司名稱},職位信息{職位名稱},工作類型信息{工作類型名稱},部門信息{部門信息},員工信息{員工ID,姓名,性別,公司名稱,政治面貌,文憑,工作類型編碼,工作類型名稱,部門名稱,出生日期,結束工作日期,參加工作日期,家庭地址,電話,手機,電子郵件,基礎工資,信用卡號}。

用戶界面設計:在設計研究過程中,已經進行用戶界面的設計。我們不僅讓設計出來的系統滿足需求,還使用戶在使用時感到舒適、便捷。

我相信,我的努力及老師的指導下,一定能夠圓滿的完成這次課題研究任務。
完成課題所需條件及落實措施:

從現有條件和所學課程來看,通過努力均可以完成畢業設計任務。

計算機系機房提供上機條件,設計資料和書籍從學生畢業設計的費用中開支。

完成課題所需條件都已經基本落實。

參考文獻、資料:

《J2EE編程技術》 郝玉龍,北方交大出版

《Java程序設計》 朱喜福,人民郵電出版

《J2EE案例開發》 季民,中國水利水電出版

《Java網路編程》 馮博,清華大學出版

《Java程序設計實用教程》 朱戰立,人民郵電出版

《Java開放源碼編程》 [美]Joe Walnes,電子工業出版

《JBuilder 10入門與提高》 王碧波,清華大學出版

《Java程序設計基礎》 (美)Gary,Bronson,北京大學出版
指導教師意見:
指導教師簽字:

年 月 日

學院畢業設計(論文)工作領導小組意見:
組長簽字:

年 月 日

4、基於java的課程網路考試系統的設計與實現 論文及代碼 誰有啊,畢業設計,跪求,急啊,有什麼辦法

專業定製爬蟲,安裝版50,附源碼100,
私人編程家教300/月
大中型軟體定製
網站建設維護
畢業設計
有意回復

5、畢業設計課題「教學網站的設計與實現」的選題依據和意義,求有能力者答疑

選題的依據和意義
隨著條件的不斷改善,各個學校逐漸建立起計算機機房,傳統的教學方式已經無法滿足教育的需求。在傳統的教學方式中,學生在學習上比較被動消極。說教方式,只能保證學生掌握知識,無法較好地培養學生主動的學習能力,因為大多數時間,老師講課之中,學生很少能獨立發現問題,更無法培養解決問題的能力了。再加上每個學生的水平的差異,不能更好地因材施教,會造成優等生、差等生分化。因此,學校非常有必要建立課程教學網站。而課程教學網站又是集圖、文、音、像於一體的知識庫,資料庫。這樣,學生能自我主動學習,探索問題,可以自主分配多餘的業余時間,在網站學習、考試。毫無疑問,傳統的教學模式再配合上新興的課程教學網站,更有利於培養學生的綜合能力。

6、大學課程作業《某某電子商務網站的設計與實現》。要求:1.設計報告2.網頁設計3資料庫。

我有以前做的dreamweaver的網頁作業。
有20份作業的源文件。任你挑選。
郵箱我就不單獨發了,為了方便大家下載參考。
我把網頁作業源文件打包上傳到我的百度網盤。可以直接下載,不需要注冊,也不需要積分。
網頁作業的下載地址 公布於本人的百度空間的文章中。

找不到或者有什麼問題的可以私信我

7、課題名稱:Photoshop實踐教學網站的設計與實現;設計要求:設計出PS實踐課(實驗)的交互網站。

我個人認為,你可以把2者結合起來啊,既然是PS的教學網站,那麼你就用PS做啊,自然就一眼看出這個網站教學實力了啊,不矛盾嘛!

與課程網站的設計與實現相關的知識