第一篇:重郵操作系統(tǒng)課程設(shè)計(jì)報(bào)告
操作系統(tǒng)課程設(shè)計(jì)
班級(jí):
姓名:
學(xué)號(hào):
時(shí)間: 年 月 日
指導(dǎo)教師:
實(shí)驗(yàn)題目:
操作系統(tǒng)課程設(shè)計(jì)
實(shí)驗(yàn)?zāi)康模?/p>
1、掌握Linux操作系統(tǒng)安裝的一般方法
2、掌握Linux 內(nèi)核升級(jí)一般方法
3、掌握系統(tǒng)引導(dǎo)管理器Grub的使用
4、學(xué)會(huì)編寫簡(jiǎn)單的模塊化的字符設(shè)備驅(qū)動(dòng)程序。
實(shí)驗(yàn)內(nèi)容:(敘述自己編寫的程序)
1.安裝Linux操作系統(tǒng): 在虛擬機(jī)平臺(tái)上安裝CentOS6.5:
2.實(shí)現(xiàn)操作系統(tǒng)內(nèi)核的升級(jí):
使用命令uname –r 查看系統(tǒng)內(nèi)核版本:
到http://004km.cn下載新內(nèi)核并解壓縮:
在終端進(jìn)入源碼目錄 輸入命令:
make mrproper(清除當(dāng)前目錄下殘留的.config和.o文件)make clean(清除編譯中間文件)make menuconfig(配置編譯選項(xiàng))開(kāi)始編譯內(nèi)核: make bzImage make modules make modules_install 配置系統(tǒng)引導(dǎo):
編輯文件/boot/grub/grub.conf default=0 所得結(jié)果如下:
3.編譯并安裝一個(gè)簡(jiǎn)單的模塊化字符設(shè)備驅(qū)動(dòng)程序:(1)編寫驅(qū)動(dòng)程序 文件memdev.c #include
#include “memdev.h”
static mem_major = MEMDEV_MAJOR;
module_param(mem_major, int, S_IRUGO);
struct mem_dev *mem_devp;/*設(shè)備結(jié)構(gòu)體指針*/
struct cdev cdev;
/*文件打開(kāi)函數(shù)*/ int mem_open(struct inode *inode, struct file *filp){
struct mem_dev *dev;
/*獲取次設(shè)備號(hào)*/
int num = MINOR(inode->i_rdev);
if(num >= MEMDEV_NR_DEVS)
return-ENODEV;
dev = &mem_devp[num];
/*將設(shè)備描述結(jié)構(gòu)指針賦值給文件私有數(shù)據(jù)指針*/
filp->private_data = dev;
return 0;}
/*文件釋放函數(shù)*/ int mem_release(struct inode *inode, struct file *filp){
return 0;}
/*讀函數(shù)*/ static ssize_t mem_read(struct file *filp, char __user *buf, size_t size, loff_t *ppos){
unsigned long p = *ppos;
unsigned int count = size;
int ret = 0;
struct mem_dev *dev = filp->private_data;/*獲得設(shè)備結(jié)構(gòu)體指針*/
/*判斷讀位置是否有效*/
if(p >= MEMDEV_SIZE)
return 0;
if(count > MEMDEV_SIZEp;
/*讀數(shù)據(jù)到用戶空間*/
if(copy_to_user(buf,(void*)(dev->data + p), count))
{
ret =p)
count = MEMDEV_SIZEEFAULT;
else
{
*ppos += count;
ret = count;
printk(KERN_INFO “written %d bytes(s)from %dn”, count, p);
}
return ret;}
/* seek文件定位函數(shù) */ static loff_t mem_llseek(struct file *filp, loff_t offset, int whence){
loff_t newpos;
switch(whence){
case 0: /* SEEK_SET */
newpos = offset;
break;
case 1: /* SEEK_CUR */
newpos = filp->f_pos + offset;
break;
case 2: /* SEEK_END */
newpos = MEMDEV_SIZE-1 + offset;
break;
default: /* can't happen */
return-EINVAL;
}
if((newpos<0)||(newpos>MEMDEV_SIZE))
return-EINVAL;
filp->f_pos = newpos;
return newpos;}
/*文件操作結(jié)構(gòu)體*/ static const struct file_operations mem_fops = {.owner = THIS_MODULE,.llseek = mem_llseek,.read = mem_read,.write = mem_write,.open = mem_open,.release = mem_release, };
/*設(shè)備驅(qū)動(dòng)模塊加載函數(shù)*/ static int memdev_init(void){
int result;
int i;
dev_t devno = MKDEV(mem_major, 0);
/* 靜態(tài)申請(qǐng)?jiān)O(shè)備號(hào)*/
if(mem_major)
result = register_chrdev_region(devno, 2, “memdev”);
else /* 動(dòng)態(tài)分配設(shè)備號(hào) */
{
result = alloc_chrdev_region(&devno, 0, 2, “memdev”);
mem_major = MAJOR(devno);
}
if(result < 0)
return result;
/*初始化cdev結(jié)構(gòu)*/
cdev_init(&cdev, &mem_fops);
cdev.owner = THIS_MODULE;
cdev.ops = &mem_fops;
/* 注冊(cè)字符設(shè)備 */
cdev_add(&cdev, MKDEV(mem_major, 0), MEMDEV_NR_DEVS);
/* 為設(shè)備描述結(jié)構(gòu)分配內(nèi)存*/
mem_devp = kmalloc(MEMDEV_NR_DEVS * sizeof(struct mem_dev), GFP_KERNEL);
if(!mem_devp)/*申請(qǐng)失敗*/
{
result =-ENOMEM;
goto fail_malloc;
}
memset(mem_devp, 0, sizeof(struct mem_dev));
/*為設(shè)備分配內(nèi)存*/
for(i=0;i < MEMDEV_NR_DEVS;i++)
{
mem_devp[i].size = MEMDEV_SIZE;
mem_devp[i].data = kmalloc(MEMDEV_SIZE, GFP_KERNEL);
memset(mem_devp[i].data, 0, MEMDEV_SIZE);
}
return 0;
fail_malloc:
unregister_chrdev_region(devno, 1);
return result;}
/*模塊卸載函數(shù)*/ static void memdev_exit(void){
cdev_del(&cdev);/*注銷設(shè)備*/
kfree(mem_devp);/*釋放設(shè)備結(jié)構(gòu)體內(nèi)存*/
unregister_chrdev_region(MKDEV(mem_major, 0), 2);/*釋放設(shè)備號(hào)*/ }
MODULE_AUTHOR(“Mac.Zhong”);MODULE_LICENSE(“GPL”);
module_init(memdev_init);module_exit(memdev_exit);
文件memdev.h #ifndef _MEMDEV_H_ #define _MEMDEV_H_
#ifndef MEMDEV_MAJOR #define MEMDEV_MAJOR 88 /*預(yù)設(shè)的mem的主設(shè)備號(hào)*/ #endif
#ifndef MEMDEV_NR_DEVS #define MEMDEV_NR_DEVS 2 /*設(shè)備數(shù)*/ #endif
#ifndef MEMDEV_SIZE #define MEMDEV_SIZE 4096 #endif
/*mem設(shè)備描述結(jié)構(gòu)體*/ struct mem_dev {
char *data;
unsigned long size;};
#endif /* _MEMDEV_H_ */
(2)為include創(chuàng)建連接文件
(3)輸入如下命令:
cd /usr/include rm-rf asm linux scsi ln-s /usr/src/linux-3.2.2/include/asm-generic asm ln-s /usr/src/linux-3.2.2/include/linux linux ln-s /usr/src/linux-3.2.2/include/scsi scsi
(4)建立相應(yīng)文件: cd /root mkdir firstdriver touch memdev.c #建立驅(qū)動(dòng)程序文件 touch memdev.h #頭文件
touch Makefile #編寫Makefile Makefile: ifneq($(KERNELRELEASE),)
obj-m:=memdev.o else
KERNELDIR:=/lib/modules/$(shell uname-r)/build
PWD:=$(shell pwd)
default:
$(MAKE)-C $(KERNELDIR)M=$(PWD)modules
clean:
rm-rf *.o *.mod.c *.mod.o *.ko
endif
(5)編譯驅(qū)動(dòng)程序:
make-C /lib/modules/2.6.32-generic/build M=/root/firstdriver modules
(6)找到memdev.ko,將它裝入內(nèi)核 imsmod memdev.ko
(7)創(chuàng)建文件節(jié)點(diǎn),mknod memdev0 c 88 0
(8)編寫測(cè)試程序,測(cè)試驅(qū)動(dòng) 文件test.c #include
遇到的問(wèn)題及解決:(程序編寫調(diào)試過(guò)程中出現(xiàn)的錯(cuò)誤及解決方法)
1.虛擬機(jī)不會(huì)使用,聽(tīng)老師講解以及百度解決;
2.linux系統(tǒng)命令不會(huì)使用,詢問(wèn)老師以及百度解決; 3.字符設(shè)備驅(qū)動(dòng)程序不會(huì)編譯和安裝,百度解決。
心得體會(huì):
掌握了Linux操作系統(tǒng)安裝的一般方法,掌握了Linux 內(nèi)核升級(jí)一般方法,掌握了系統(tǒng)引導(dǎo)管理器Grub的使用,學(xué)會(huì)了編寫簡(jiǎn)單的模塊化的字符設(shè)備驅(qū)動(dòng)程序。
第二篇:軟件工程課程設(shè)計(jì)重郵
《軟件工程》課程設(shè)計(jì)任務(wù)書
一.目的
軟件工程課程設(shè)計(jì)是軟件工程專業(yè)一個(gè)綜合性的實(shí)踐教學(xué)環(huán)節(jié),其目的在于促進(jìn)學(xué)生復(fù)習(xí)和鞏固計(jì)算機(jī)軟件設(shè)計(jì)知識(shí),加深對(duì)軟件設(shè)計(jì)方法、軟件設(shè)計(jì)技術(shù)和設(shè)計(jì)思想的理解,并能運(yùn)用所學(xué)軟件設(shè)計(jì)知識(shí)和面向?qū)ο蠹夹g(shù)進(jìn)行綜合軟件設(shè)計(jì),提高學(xué)生的綜合應(yīng)用能力。通過(guò)這次課程設(shè)計(jì),要掌握UML(統(tǒng)一建模語(yǔ)言),并能運(yùn)用UML在Visio中建模。
二.要求:
1.兩人一組。
2.熟悉Visio開(kāi)發(fā)環(huán)境,認(rèn)真分析題目。
3.掌握UML的基本模型元素(如角色、用例、類、數(shù)據(jù)模型等),準(zhǔn)確把握所要開(kāi)發(fā)系統(tǒng)的功能需求,認(rèn)真完成系統(tǒng)前期的需求分析,繪制出系統(tǒng)的業(yè)務(wù)流程圖。
4.建立完善的角色與用例的關(guān)系,繪制出系統(tǒng)的用例圖。
5.分析用例為完成業(yè)務(wù)目標(biāo)而進(jìn)行的各項(xiàng)任務(wù)或活動(dòng)及執(zhí)行順序,繪制出用例要求所要進(jìn)行的活動(dòng)以及活動(dòng)間的約束關(guān)系的活動(dòng)圖。
6.分析各用例的可能狀態(tài)及狀態(tài)間的轉(zhuǎn)移,描述狀態(tài)變化序列的起點(diǎn)和終點(diǎn),繪制出系統(tǒng)的狀態(tài)圖。
7.進(jìn)行業(yè)務(wù)流的分析,根據(jù)系統(tǒng)所要完成的功能和所要處理的數(shù)據(jù),畫出反映系統(tǒng)邏輯模型的數(shù)據(jù)流程圖。
8.通過(guò)分析系統(tǒng)的功能要求,抽象出系統(tǒng)的實(shí)體類,描述各實(shí)體類的屬性,建立各個(gè)實(shí)體類及它們之間的關(guān)聯(lián),繪制系統(tǒng)的實(shí)體類圖。
9.總結(jié)分析出系統(tǒng)的各功能模塊,繪制系統(tǒng)各子模塊的結(jié)構(gòu)圖。
10.模塊的結(jié)構(gòu)設(shè)計(jì)完成后,進(jìn)行功能模塊的界面風(fēng)格和要求規(guī)范的設(shè)計(jì),實(shí)現(xiàn)變量命名規(guī)范和模塊命名規(guī)范的設(shè)計(jì),根據(jù)設(shè)計(jì)結(jié)果撰寫各模塊說(shuō)明書 11.進(jìn)行檢查,并提交設(shè)計(jì)報(bào)告。
三.報(bào)告要求:
1.實(shí)驗(yàn)題目 2.需求分析
3.系統(tǒng)總體設(shè)計(jì):包括角色、用例關(guān)系說(shuō)明與描述,用例狀態(tài)流程的說(shuō)明與描述等內(nèi)容。4.系統(tǒng)詳細(xì)設(shè)計(jì):包括詳細(xì)的業(yè)務(wù)流程的設(shè)計(jì)和數(shù)據(jù)流程圖的設(shè)計(jì)、相關(guān)實(shí)體類圖的設(shè)計(jì)與說(shuō)明等。5.心得體會(huì)
四.參考資料:
1.Martin Fowler & Kendall Scott:UML Distilled Second Edition A Brief Guide to the Standard Object Modeling Language 2.UML參考手冊(cè)
3.Jason T.Roff 著 張瑜 楊繼萍 等 譯《UML基礎(chǔ)教程》 清華大學(xué)出版社 4.參見(jiàn)本中心服務(wù)器ftp:s@172.16.38.100《軟件工程》 目錄下的相關(guān)文檔。
五.設(shè)計(jì)內(nèi)容
可自選題目,但須經(jīng)過(guò)指導(dǎo)教師審查。
可選題目:
1.房產(chǎn)管理系統(tǒng):
在我國(guó)住房管理是一個(gè)關(guān)系到每個(gè)人切身利益的大問(wèn)題。某大學(xué)擬開(kāi)發(fā)一個(gè)用計(jì)算機(jī)進(jìn)行房產(chǎn)管理的系統(tǒng),要求系統(tǒng)具有分房、調(diào)房、退房和咨詢統(tǒng)計(jì)等功能。
房產(chǎn)科把用戶申請(qǐng)表輸入系統(tǒng)后,系統(tǒng)首先檢查申請(qǐng)表的合法性,對(duì)不合法的申請(qǐng)表系統(tǒng)會(huì)拒絕接受;對(duì)合法的申請(qǐng)表則根據(jù)其類型分別進(jìn)行處理。
如果是分房申請(qǐng),則根據(jù)申請(qǐng)者的情況(年齡、工齡、職稱、職務(wù)、家庭人口等)計(jì)算其分?jǐn)?shù),當(dāng)分?jǐn)?shù)高于閾值分?jǐn)?shù)時(shí),按分?jǐn)?shù)高低將申請(qǐng)表插到分房隊(duì)列的適當(dāng)位置。每月最后一天進(jìn)行一次分房活動(dòng):從空房文件中讀出空房信息(房號(hào)、面積、等級(jí)、單位面積房租等);把好房?jī)?yōu)先分配給排在前面的符合該等級(jí)住房條件的申請(qǐng)者,從空房文件中刪除這個(gè)房號(hào)的信息,從分房隊(duì)列中刪除該申請(qǐng)者;把此房號(hào)的信息和住房信息一起寫入住房文件中,輸出住房分配單給住戶,同時(shí)計(jì)算房租寫入房租文件中。
如果是退房申請(qǐng),則從住房文件和房租文件中刪除有關(guān)信息,再把此房號(hào)的信息寫到空房文件中。
如果是調(diào)房申請(qǐng),則根據(jù)申請(qǐng)者的情況確定其住房等級(jí),然后在空房文件中查找屬于該等級(jí)的空房,退掉原住房,再進(jìn)行與分房類似的處理。
住戶可向系統(tǒng)詢問(wèn)分房的閾值分?jǐn)?shù),居住某類房屋的條件,某房號(hào)的單位面積房租等信息。房產(chǎn)科可要求系統(tǒng)打印出住房情況的統(tǒng)計(jì)表,或更改某類房屋的居住條件、單位面積房租等信息。
2.選票統(tǒng)計(jì)系統(tǒng):
某學(xué)會(huì)下屬的各個(gè)專業(yè)委員會(huì)經(jīng)常需要改選或補(bǔ)選,因此希望開(kāi)發(fā)一個(gè)選票統(tǒng)計(jì)系統(tǒng)。
一次選舉最多有10組選票,每組用于一個(gè)委員會(huì)的選舉。一個(gè)組內(nèi)的所有選票都在第61至80列穿有該委員會(huì)的名字,以及該委員會(huì)候選人的名字。每個(gè)委員會(huì)最多可有25名候選人。選舉人欲投某候選人的票,就在選票的第21至45列(對(duì)應(yīng)候選人1~25號(hào))的相應(yīng)列上穿一個(gè)減號(hào)。一張選票上允許有多個(gè)減號(hào),因?yàn)橐粋€(gè)委員會(huì)可能有多個(gè)空缺名額。一包選票由若干張選票組成(一個(gè)委員會(huì)一張)。選舉人每人一包選票,穿好記號(hào)后交給系統(tǒng)去統(tǒng)計(jì)票數(shù)。系統(tǒng)首先讀入基本信息(委員會(huì)名、候選人數(shù)、該委員會(huì)需補(bǔ)選的人數(shù)),然后讀入一張選票。若選票無(wú)效時(shí)則打印出選票內(nèi)容。繼續(xù)下一張選票的讀??;若選票有效則處理該選票,然后繼續(xù)下一張選票的讀取。選票全部處理完后,打印出每個(gè)委員會(huì)的每名候選人的得票數(shù)。
選票的有效性判斷步驟如下: ① 核對(duì)委員會(huì)名字(61至80列),若有此名則繼續(xù); ② 檢查21至45列,若只有減號(hào)或空白,則繼續(xù);
③ 檢查在最后一個(gè)候選人后面還有無(wú)記號(hào),若無(wú)則繼續(xù);
④ 統(tǒng)計(jì)選票上記號(hào)的總數(shù),若不超過(guò)允許的記號(hào)數(shù),則此張選票有效。
若上述4項(xiàng)有一項(xiàng)不合格,則此張選票無(wú)效。3.旅館客房管理系統(tǒng):
某旅館有客房若干,客房房間朝向分南、北兩種,朝南的房間又分兩人間、三人間兩種;朝北的房間分三人間、四人間兩種。每天住宿費(fèi)因房間類型而異。每個(gè)房間、床位分別有房間號(hào)、床號(hào)。
系統(tǒng)根據(jù)房間已住旅客性別分配性別相同的旅客住進(jìn)去,若是空房間則可分配給任意同一性別的旅客住。旅客住宿登記時(shí)需登記姓名、身份證號(hào)、住址、性別、住進(jìn)日期;旅客退房時(shí)根據(jù)居住天數(shù)和住房規(guī)格結(jié)算住宿金額。
4.自動(dòng)售貨機(jī)系統(tǒng):
自動(dòng)售貨機(jī)系統(tǒng)是一種無(wú)人售貨系統(tǒng)。售貨時(shí),顧客把硬幣投入機(jī)器的投幣口中,機(jī)器檢查硬幣的大小、重量、厚度及邊緣類型。有效的硬幣是一元幣、五角幣、一角幣、五分幣和一分幣。其它貨幣都被認(rèn)為是假幣。機(jī)器拒收假幣,并將其從退幣孔退出。當(dāng)機(jī)器接收了有效的硬幣之后,將之送入硬幣儲(chǔ)藏器。顧客支付的貨幣根據(jù)硬幣的面值進(jìn)行累加。
自動(dòng)售貨機(jī)裝有貨物分配器,每個(gè)分配器中包含0 個(gè)或多個(gè)價(jià)格相同的貨物。顧客通過(guò)選擇貨物分配器來(lái)選擇貨物。如果有貨,且顧客支付的貨幣值不小于該貨物的價(jià)格,貨物將被分配到貨物傳送孔送給顧客,并將找零返回到退幣孔。如果無(wú)貨,則和顧客支付的貨幣值相等的硬幣將被送到退幣孔。如果顧客支付的貨幣值小于所選貨物的價(jià)格,機(jī)器將等待顧客投進(jìn)更多的貨幣。如果顧客決定不買所選擇的貨物,他投放進(jìn)的硬幣將從退幣孔中退出。
5.學(xué)校醫(yī)療費(fèi)管理系統(tǒng):
要求數(shù)據(jù)庫(kù)中存放每個(gè)職工的職工號(hào)、姓名、所屬部門。職工報(bào)銷醫(yī)療費(fèi)時(shí)需填寫所屬部門、職工號(hào)、姓名、日期。醫(yī)療費(fèi)分校內(nèi)門診費(fèi)、校外門診費(fèi)、住院費(fèi)、子女醫(yī)療費(fèi)四種。該校規(guī)定,每年每個(gè)職工的醫(yī)療費(fèi)有一個(gè)限額,在年初時(shí)確定,一年內(nèi)醫(yī)療費(fèi)不超過(guò)限額時(shí)可全部報(bào)銷;超額部分報(bào)銷90%,其余10%由職工個(gè)人負(fù)擔(dān)。職工子女的醫(yī)療費(fèi)也另有限額。
系統(tǒng)每天記錄當(dāng)天報(bào)銷的若干職工或職工子女的醫(yī)療費(fèi)類別、金額,在當(dāng)天下班前自動(dòng)結(jié)賬,統(tǒng)計(jì)當(dāng)天報(bào)銷的醫(yī)療費(fèi)總額,供出納員核對(duì)。每筆賬要保存?zhèn)洳?。每天?bào)銷的費(fèi)用要和各個(gè)職工已報(bào)銷的金額累計(jì)起來(lái),以便檢查哪些職工已超額。系統(tǒng)要配有適當(dāng)?shù)牟樵児δ堋D杲K結(jié)算后,下一開(kāi)始時(shí)要對(duì)數(shù)據(jù)庫(kù)文件進(jìn)行初始化。職工調(diào)離、調(diào)入本單位、或在本單位內(nèi)部部門間調(diào)動(dòng),數(shù)據(jù)庫(kù)文件要及時(shí)修改。
6.路障跟蹤與維修系統(tǒng):
某市政部門欲開(kāi)發(fā)計(jì)算機(jī)控制的路障與維修系統(tǒng)(PHTRS)。路障被發(fā)現(xiàn)上報(bào)后,系統(tǒng)賦予該路障一個(gè)識(shí)別號(hào)碼,并存入其所在街道地址、大?。ò?比10的比例)、位置(路中、人行道上等等)、所屬街區(qū)(根據(jù)街道地址得出)、以及維修優(yōu)先級(jí)(根據(jù)其大小確定)。對(duì)每個(gè)路障有一個(gè)施工命令,包括路障位置、大小、施工隊(duì)編號(hào)、施工人數(shù)、配備工具、維修的工時(shí)數(shù),路障狀態(tài)(施工中、已修復(fù)、臨時(shí)修復(fù)、未修復(fù))、材料用量、維護(hù)費(fèi)用(根據(jù)維修工時(shí)、人數(shù)、材料及工具等計(jì)算得出)。最后,系統(tǒng)建立一個(gè)損失報(bào)告文件,記錄此路障造成的損失,包括市民的姓名、地址、電話、損失類型、以及損失量(以元為單位)。PHTRS是一個(gè)在線系統(tǒng),可隨時(shí)查詢。
7.網(wǎng)上超市系統(tǒng):NetSuperMarket
主要功能描述:用戶通過(guò)瀏覽器訪問(wèn)網(wǎng)上超市系統(tǒng),系統(tǒng)以分類的形式顯示所有商品,幫助用戶逐步找到所要的商品;系統(tǒng)也提供關(guān)鍵詞檢索功能;用戶在瀏覽商品目錄是可以點(diǎn)擊察看商品的具體信息和價(jià)格;如果滿意,用戶可以將商品暫時(shí)放入“購(gòu)物車“;也可以隨時(shí)從“購(gòu)物車“中取出商品。當(dāng)用戶選完后可以進(jìn)行付款處理,這時(shí)用戶輸入信用卡號(hào),系統(tǒng)聯(lián)系對(duì)應(yīng)的銀行支付系統(tǒng),開(kāi)始支付。最后系統(tǒng)應(yīng)能夠向管理員提供查詢界面和各類報(bào)表,統(tǒng)計(jì)商品的銷售情況。
8.網(wǎng)上選課系統(tǒng):
主要功能描述:系統(tǒng)首先維護(hù)校內(nèi)所有課程的信息;課程分為研究生、本科生;也可以分為必修、選修、輔修。用戶以學(xué)號(hào)和密碼登陸,系統(tǒng)顯示用戶以選的課程、用戶有權(quán)選但未選的其他課程,并顯示具體信息(如學(xué)分)。用戶選擇后,系統(tǒng)根據(jù)規(guī)則檢查用戶是否進(jìn)行正確的選課(如時(shí)間沖突、跨專業(yè)選課等);如果錯(cuò)誤提示用戶改,否則修改選課數(shù)據(jù)庫(kù)。最后系統(tǒng)應(yīng)能夠向管理員提供查詢界面和各類報(bào)表,統(tǒng)計(jì)每門課的選課情況。
9.電子郵件客戶端產(chǎn)品:MailAgent
主要需求描述:為連接到Internet 的網(wǎng)絡(luò)用戶提供簡(jiǎn)便快捷的電子郵件收發(fā)系統(tǒng)。用戶建立加密賬號(hào),并且一個(gè)賬號(hào)可以對(duì)應(yīng)多個(gè)pop3服務(wù)器的賬號(hào);信件輸入時(shí)應(yīng)該對(duì)輸入的文本進(jìn)行自動(dòng)的語(yǔ)法檢查;對(duì)所寫的e-mail地址也有合法性檢查;允許有多個(gè)附件;信件可以存儲(chǔ)在硬盤上,并壓縮、加密,連線時(shí)隨時(shí)可以發(fā)出,收件人可以是一個(gè)人也可以是一個(gè)組;連線時(shí)可以一次性收取多封郵件,隨時(shí)可以閱讀。設(shè)有地址本功能,包括人、組的設(shè)置。安全與保密要求:同一臺(tái)pc機(jī)上的不同用戶,可以為自己建立賬號(hào),設(shè)定密碼,互相之間不能訪問(wèn)。
10.在線數(shù)字圖書館系統(tǒng):OnlineDigiLib
主要功能描述:用戶通過(guò)瀏覽器遠(yuǎn)程登陸到服務(wù)器,通過(guò)身份認(rèn)證后并且用戶有足夠的余額,進(jìn)入系統(tǒng)。系統(tǒng)根據(jù)用戶已有的愛(ài)好記錄和查詢權(quán)限,在界面上列出被允許查閱書以及具體信息和狀態(tài)。用戶可以點(diǎn)擊具體書籍,從服務(wù)器中取得書本內(nèi)容、解碼顯示。用戶便可以察看該書的摘要信息以及具體內(nèi)容。點(diǎn)擊現(xiàn)實(shí)具體內(nèi)容后,系統(tǒng)開(kāi)始計(jì)費(fèi)(按書的價(jià)格*系數(shù)記費(fèi)),并且能夠根據(jù)一段時(shí)間的借書紀(jì)錄,統(tǒng)計(jì)出查閱的統(tǒng)計(jì)信息(如查閱書排行榜)。系統(tǒng)還應(yīng)提供用戶查詢記費(fèi)的界面。
11.機(jī)器人足球比賽中機(jī)器人的決策控制軟件: FootballPlayer
主要功能描述:在輪式機(jī)器人足球比賽中,需要你開(kāi)發(fā)一個(gè)機(jī)器人行為控制軟件。該軟件通過(guò)由機(jī)器人眼睛中的攝像機(jī)傳來(lái)的圖像,解碼、分析后判斷出當(dāng)前場(chǎng)上的局勢(shì)(如同伴的位置、對(duì)手的位置、球的位置),并向馬達(dá)控制器發(fā)出行為信號(hào)(如前進(jìn))。對(duì)違反規(guī)則的行為應(yīng)該能夠識(shí)別。該軟件也可以連上主機(jī),灌輸有關(guān)比賽規(guī)則、進(jìn)攻策略等知識(shí)。
12.防止黑客和病毒攻擊的防火墻軟件:FireWall
主要功能描述:該系統(tǒng)實(shí)時(shí)監(jiān)控本主機(jī)的各個(gè)ip端口,監(jiān)視每個(gè)端口的訪問(wèn)模式;并且維護(hù)一個(gè)攻擊模式數(shù)據(jù)庫(kù);如果發(fā)現(xiàn)某個(gè)端口出現(xiàn)與攻擊模式數(shù)據(jù)庫(kù)相匹配的攻擊時(shí),報(bào)警,并且在2分鐘后,自動(dòng)關(guān)閉改端口,并保留攻擊信息(如ip地址、mac地址)以備追查。用戶可以通過(guò)控制面板設(shè)定對(duì)該系統(tǒng)更新攻擊模式數(shù)據(jù)庫(kù)、設(shè)置對(duì)各端口的屏蔽、對(duì)系統(tǒng)的開(kāi)關(guān)、報(bào)警參數(shù)等;也可以察看指定時(shí)間段中的攻擊行為信息。
13.機(jī)票預(yù)訂系統(tǒng):
為方便旅客,某航空公司擬開(kāi)發(fā)一個(gè)機(jī)票預(yù)訂系統(tǒng)。旅行社把預(yù)訂機(jī)票的旅客信息(姓名、工作單位、身份證號(hào)碼、旅行時(shí)間、旅行目的地等)輸入該系統(tǒng),系統(tǒng)為旅客安排航班,印出取票通知和賬單。旅客在飛機(jī)起飛的前一天憑取票通知和賬單到旅行社交款取票,系統(tǒng)校對(duì)無(wú)誤即出機(jī)票給旅客。
14.患者監(jiān)護(hù)系統(tǒng):
目前住院病人主要由護(hù)士護(hù)理,這樣做不僅需要大量護(hù)士,而且由于不能隨時(shí)觀察危重病人的病情變化,還會(huì)延誤搶救時(shí)機(jī)。某醫(yī)院擬開(kāi)發(fā)一個(gè)以計(jì)算機(jī)為中心的患者監(jiān)護(hù)系統(tǒng),基本要求是隨時(shí)接收每個(gè)病人的生理信號(hào)(脈搏、體溫、血壓、心電圖等),定時(shí)記錄病人情況以形成患者日志。當(dāng)某個(gè)病人的生理信號(hào)超出醫(yī)生規(guī)定的安全范圍時(shí),向值班護(hù)士發(fā)出警告信息。此外,護(hù)士在需要時(shí)還可以要求系統(tǒng)打印出某個(gè)指定病人的病情報(bào)告。
15.技術(shù)資料管理系統(tǒng):
某大學(xué)軟件工程研究中心的資料室中目前大約存有1000份技術(shù)報(bào)告、論文、圖書和雜志,每份資料在目錄柜中都有一張索引卡。預(yù)計(jì)資料室中最終會(huì)增加到有10000份資料。為改善對(duì)資料的管理工作,打算為每份資料建立兩張穿孔卡片,并且開(kāi)發(fā)一個(gè)程序以完成各種檢索、排序和輸出的工作。
數(shù)據(jù)結(jié)構(gòu)要求:為每份資料建立的一對(duì)穿孔卡片上都有4個(gè)固定格式的字符域,Ⅰ、Ⅱ域在第一張卡片上,Ⅲ、Ⅳ域在第二張卡片上。第Ⅰ域?qū)?0個(gè)字符,包含作者(們)的姓名;第Ⅱ域?qū)?0個(gè)字符,包含完整的或縮寫的標(biāo)題;第Ⅲ域?qū)?0個(gè)字符,包含此份資料的關(guān)鍵字;第Ⅳ域?qū)?0個(gè)字符,指明此份資料的出處(雜志或會(huì)議錄的名字、期數(shù)、出版社等)。
功能要求:
① 讀入不定長(zhǎng)的一疊資料卡并儲(chǔ)存它們;
② 按第一作者名字的字母順序排列讀入的數(shù)據(jù); ③ 印出上述數(shù)據(jù);
④ 根據(jù)卡片第Ⅲ域的內(nèi)容建立關(guān)鍵字表,刪除重復(fù)的關(guān)鍵字,按字母順序排列并打??;
⑤ 在作者名字域中搜索給定的作者名字,印出此作者的著作清單; ⑥ 搜索關(guān)鍵字域,找出包含指定的1個(gè)、2個(gè)、或3個(gè)關(guān)鍵字的資料; ⑦ 對(duì)標(biāo)題域中的字提供與第⑥項(xiàng)類似的檢索功能。
輸入的卡片疊中的第一張卡片指明系統(tǒng)應(yīng)該完成的任務(wù)(可能是一串任務(wù)),因此,這張卡片實(shí)際上是程序的控制卡。程序應(yīng)能在一次運(yùn)行中完成多個(gè)任務(wù)。
16.房產(chǎn)經(jīng)營(yíng)管理系統(tǒng):
系統(tǒng)中存放經(jīng)營(yíng)公司現(xiàn)有房產(chǎn)的地點(diǎn)、樓房名稱、樓房總層次、房間的層次、朝向、規(guī)格(一室一廳或二室一廳或三室一廳)、面積。房間可以出售或租用,分別寫出每平方米的單價(jià)和總價(jià)??蛻艨赡茈S時(shí)查詢未出售或未出租的房間的上述基本情況。房產(chǎn)經(jīng)營(yíng)商可隨時(shí)查詢已售出或出租的房產(chǎn)的資金回收情況及未出售或未出租的房產(chǎn)的資金占用情況。
17.航空交通控制系統(tǒng)
某小島國(guó)決定為自己的一個(gè)飛機(jī)場(chǎng)建一個(gè)航空交通控制(ACT)系統(tǒng)。系統(tǒng)描述如下:
所有在該機(jī)場(chǎng)降落的飛機(jī)都須配有一部自動(dòng)應(yīng)答器,將該機(jī)的機(jī)型和航行數(shù)據(jù)以高密度打包的格式發(fā)送至ATC地面站。ATC地面站可向飛機(jī)進(jìn)行信息查詢。ATC地面站收到數(shù)據(jù)后,即進(jìn)行解包并存入飛機(jī)數(shù)據(jù)庫(kù),系統(tǒng)可根據(jù)貯存信息向航空交通控制員進(jìn)行計(jì)算機(jī)圖形顯示,該顯示每10秒更新一次。所有信息經(jīng)分析以確定是否存在“危險(xiǎn)性”。航空交通控制員可就熒屏上顯示的任何飛機(jī)向數(shù)據(jù)庫(kù)查詢有關(guān)信息。
18.文檔管理系統(tǒng)
面向企業(yè)用戶,研制開(kāi)發(fā)一套文檔管理系統(tǒng),實(shí)現(xiàn)企業(yè)文檔的存儲(chǔ)、分類、維護(hù)、檢索、授權(quán)等過(guò)程的全面管理。為用戶主要提供如下功能:
1)登陸:用戶通過(guò)瀏覽器登陸到系統(tǒng),輸入用戶名和密碼,登陸到系統(tǒng),看到本用戶所能看到的各類信息,包括文檔分類樹、文檔的基本信息等。
2)人員組織角色管理與授權(quán)管理:創(chuàng)建和維護(hù)企業(yè)的人員、組織和角色,人員具有登陸名、名稱、密碼、郵件、手機(jī)等一些基本的屬性,人員從屬與一個(gè)或多個(gè)組織,具有一個(gè)或多個(gè)角色,組織間具有層次關(guān)系。提供文檔按照人員與角色兩種方式的授權(quán)模式。
3)文檔分類管理:用戶可以增刪改文檔的分類,文檔分類間可以建立層次關(guān)系。4)文檔維護(hù):用戶可以增刪改文檔,文檔包括基本的描述信息(如文檔編號(hào)、文檔名、文檔創(chuàng)建時(shí)間、創(chuàng)建人、大小等)及文檔對(duì)應(yīng)的文件列表。
5)文檔檢索:用戶可以方便的按照文檔的名稱、編號(hào)、創(chuàng)建時(shí)間、創(chuàng)建人等信息進(jìn)行檢索。
19.客戶關(guān)系管理系統(tǒng)
“以客戶為中心”的客戶關(guān)系管理成為網(wǎng)絡(luò)時(shí)代電子商務(wù)制勝的重要因素,愈來(lái)愈受到企業(yè)的重視??蛻絷P(guān)系管理系統(tǒng),簡(jiǎn)稱CRM(Customer Relationship Management),是指公司在做營(yíng)銷策略時(shí)關(guān)注于顧客發(fā)展,給客戶以最優(yōu)的管理:通過(guò)完善的客戶支持平臺(tái)、客戶交互平臺(tái)、企業(yè)生產(chǎn)平臺(tái)、最大限度地實(shí)現(xiàn)顧客支付價(jià)值、顧客終身價(jià)值,這樣讓公司的潛在客戶變成現(xiàn)實(shí)客戶、現(xiàn)實(shí)客戶變成忠誠(chéng)客戶,通過(guò)滿足每個(gè)客戶特殊需求,與客戶建立長(zhǎng)期穩(wěn)定的關(guān)系。項(xiàng)目擬研制一個(gè)基于B/S架構(gòu)的客戶關(guān)系管理系統(tǒng),實(shí)現(xiàn)對(duì)客戶數(shù)據(jù)的管理,系統(tǒng)提供的主要功能如下:
1)客戶資料管理:主要實(shí)現(xiàn)客戶資料的錄入、修改、保存、刪除、以及查詢等功能。客戶資料的主要內(nèi)容包括:用戶編碼、用戶單位名稱、用戶單位法人代表、郵政編碼、用戶單位的聯(lián)系地址、用戶單位的聯(lián)系部門、用戶單位的代理人、用戶單位的銀行賬號(hào)、電話掛號(hào)、相關(guān)銷售員編碼、聯(lián)系電話、開(kāi)戶行、稅號(hào)、用戶單位所在區(qū)域、購(gòu)買產(chǎn)品類型、購(gòu)買日期、購(gòu)買合同編號(hào)等資料。客戶資料的查詢功能提供根據(jù)客戶名稱、地域、客戶代碼、客戶的單位地址等屬性進(jìn)行查詢的功能。
2)客戶支持管理:由客戶使用支持、技術(shù)服務(wù)培訓(xùn)及顧客聯(lián)系提醒兩個(gè)部分。技術(shù)支持:將公司對(duì)產(chǎn)品使用培訓(xùn)文檔轉(zhuǎn)換成電子文檔,由客戶自己上網(wǎng)了解產(chǎn)品的性能。技術(shù)服務(wù)培訓(xùn):實(shí)現(xiàn)公司的培訓(xùn)計(jì)劃、培訓(xùn)對(duì)象的錄入、修改、刪除、保存功能以及將公司對(duì)公司技術(shù)人員的培訓(xùn)內(nèi)容作成電子文檔,在局域網(wǎng)內(nèi)由公司的技術(shù)人員自由閱讀,除此之外還提供培訓(xùn)提醒功能。顧客聯(lián)系提醒:根據(jù)服務(wù)部門的條件設(shè)定實(shí)現(xiàn)服務(wù)人員對(duì)顧客的聯(lián)系的定期提醒。
3)售后服務(wù)管理:由服務(wù)質(zhì)量檢查考核管理、走訪顧客管理二個(gè)部分組成。服務(wù)質(zhì)量檢查考核管理:實(shí)現(xiàn)服務(wù)質(zhì)量檢查考核單的生成、錄入、刪除、存檔等功能。走訪顧客管理:實(shí)現(xiàn)走訪顧客記錄單的生成、錄入、刪除、存檔等功能,并根據(jù)提供的測(cè)評(píng)方法自動(dòng)產(chǎn)生測(cè)評(píng)結(jié)果。
4)投訴管理子模塊由正常信息反饋、客戶投訴、信息處理三個(gè)部分組成。正常信息反饋:根據(jù)客戶的信息反饋生成信息反饋單,并實(shí)現(xiàn)對(duì)客戶的信息反饋單的維護(hù)功能??蛻敉对V:根據(jù)基礎(chǔ)數(shù)據(jù)管理中對(duì)投訴的分類生成顧客投訴單,并實(shí)現(xiàn)對(duì)顧客投訴單的維護(hù)功能。信息處理:根據(jù)公司的規(guī)定,對(duì)顧客的反饋信息及客戶投訴進(jìn)行處理,并生成信息處理單,以及實(shí)現(xiàn)對(duì)信息處理單的保存、刪除、存檔等維護(hù)功能。
5)新品市場(chǎng)反饋:結(jié)合客戶新品開(kāi)發(fā)檔案,輸入市場(chǎng)反饋情況,并通過(guò)量化來(lái)對(duì)比所有新品的反饋分,進(jìn)而分析新品的市場(chǎng)銷售趨勢(shì)。
20.設(shè)備管理系統(tǒng)
生產(chǎn)型企業(yè)中存在大量的設(shè)備,如何對(duì)這些設(shè)備進(jìn)行全面管理是企業(yè)管理的重要內(nèi)容。項(xiàng)目擬研發(fā)基于B/S架構(gòu)的設(shè)備管理系統(tǒng),包括設(shè)備申購(gòu)、設(shè)備臺(tái)賬、車間設(shè)備使用、使用狀況查詢分析四部分組成。其中設(shè)備申購(gòu)是一個(gè)過(guò)程,包括設(shè)備申請(qǐng)采購(gòu)、啟用和封存、報(bào)廢過(guò)程。設(shè)備臺(tái)賬是對(duì)所有的設(shè)備建立的一個(gè)臺(tái)賬,并提供設(shè)備查詢功能。車間設(shè)備使用主要是記錄設(shè)備使用過(guò)程中的各種情況,包括日常維修、設(shè)備交接班記錄等。使用狀況查詢分析是根據(jù)設(shè)備臺(tái)賬,來(lái)查詢車間設(shè)備使用的各種情況,進(jìn)行一定的分析。
設(shè)備管理涉及多個(gè)表單,其中主要表單如下:
1)設(shè)備的基本信息表:設(shè)備名稱、規(guī)格/型號(hào)、產(chǎn)地、價(jià)格、原臺(tái)賬數(shù)、購(gòu)入時(shí)間、是否在建、整機(jī)、使用時(shí)間、折價(jià)年限、設(shè)備存放車間、現(xiàn)臺(tái)賬數(shù)、車間號(hào)、新開(kāi)發(fā)、性能、憑證號(hào)數(shù)、設(shè)備原號(hào)、備注。
2)設(shè)備購(gòu)置申請(qǐng)表:設(shè)備名稱、型號(hào)規(guī)格、數(shù)量、要求進(jìn)貨時(shí)間、申請(qǐng)理由、申請(qǐng)部門、申請(qǐng)時(shí)間、主要技術(shù)要求。
3)設(shè)備啟用和封存表:設(shè)備名稱、設(shè)備編號(hào)、型號(hào)/規(guī)格、封存地點(diǎn)、封存日期、啟封日期、技術(shù)狀況隨機(jī)附件、備注,申請(qǐng)?jiān)O(shè)備封存理由(啟封)原因、使用部門意見(jiàn)、設(shè)備科意見(jiàn)、制造部意見(jiàn)、副總經(jīng)理批準(zhǔn)、申請(qǐng)單位負(fù)責(zé)人。4)設(shè)備報(bào)廢表:設(shè)備名稱、設(shè)備編號(hào)、型號(hào)/規(guī)格、安裝地點(diǎn)、申請(qǐng)?jiān)O(shè)備報(bào)廢原因、備注,報(bào)廢設(shè)備處置方案、使用部門負(fù)責(zé)人、設(shè)備科、制造部、副總經(jīng)理審批。
5)日常維修表:日期、機(jī)床編號(hào)、責(zé)任人、檢查人。輸入完成后,自動(dòng)生成上月21日到本月20日的監(jiān)督內(nèi)容子表,并逐條輸入每日監(jiān)督內(nèi)容,分成包潔區(qū)衛(wèi)生(生產(chǎn)區(qū)域衛(wèi)生)類:地面、墻壁、玻璃、工具箱;設(shè)備類:機(jī)床外表、導(dǎo)軌絲桿清潔無(wú)拉傷加油、其他;定置擺放類:工裝刀量具擺放、余料擺放、其他;及其他規(guī)章制度遵守情況、處置措施、檢查人、監(jiān)督人。
6)設(shè)備交接記錄:輸入設(shè)備編號(hào),自動(dòng)根據(jù)設(shè)備檢查項(xiàng)目表中得到所有項(xiàng)目及分?jǐn)?shù)生成多條記錄,自動(dòng)記錄日期、設(shè)備編號(hào)、檢查項(xiàng)目及狀況、標(biāo)準(zhǔn)、分?jǐn)?shù),選擇班次(兩班制的,1表示白班,2表示夜班;三班制的,1表示白班1,2表示白班2,3表示夜班),輸入各項(xiàng)目的班組自查結(jié)果,自動(dòng)生成每日評(píng)分,記錄交班人、接班人,如果每日評(píng)分低于合格分?jǐn)?shù)的,需要輸入車間處理結(jié)果和監(jiān)督抽查結(jié)果。
21.寵物醫(yī)院
為寵物主人和寵物醫(yī)院間建立一個(gè)溝通的平臺(tái),主要提供如下功能。
醫(yī)院管理:醫(yī)院的注冊(cè)申請(qǐng)需要提供營(yíng)業(yè)執(zhí)照、資質(zhì)證書等材料,經(jīng)由管理員審核通過(guò)后,該醫(yī)院才能成為網(wǎng)站的會(huì)員,并且根據(jù)醫(yī)院的醫(yī)療條件,醫(yī)院會(huì)被評(píng)定有不同的星級(jí)水平。醫(yī)院申請(qǐng)的時(shí)候需提供一個(gè)密碼,以后醫(yī)生要申請(qǐng)成為該醫(yī)院的醫(yī)生必須輸入該密碼。
醫(yī)生管理:可以申請(qǐng)某個(gè)醫(yī)院的醫(yī)生,申請(qǐng)加入時(shí)需輸入該醫(yī)院的密碼,當(dāng)成為醫(yī)生之后,就可以對(duì)用戶提出的問(wèn)診進(jìn)行診斷。用戶可以通過(guò)網(wǎng)站,查找到所以醫(yī)生的信息
在線問(wèn)診:每個(gè)個(gè)人會(huì)員都可以進(jìn)行問(wèn)診,用戶輸入病癥的一些基本描述,這個(gè)描述有一個(gè)特定格式,類似于病歷。醫(yī)生對(duì)每一個(gè)為診斷的問(wèn)診都可以做出診斷。對(duì)于之前的一些問(wèn)診,用戶都可以查詢得到。
22.基于B/S架構(gòu)的網(wǎng)絡(luò)論壇
為各類門戶網(wǎng)站提供一個(gè)可定時(shí)開(kāi)放的、安全高效的BBS論壇系統(tǒng),使之成為公眾就關(guān)心的重大問(wèn)題和疑難問(wèn)題交流的平臺(tái)。論壇具有以下功能:
1)用戶注冊(cè)登陸:用戶可自定義用戶名、密碼、密碼提示問(wèn)題和答案、個(gè)人頭銜、門派、簽名、自我簡(jiǎn)介等信息,可以自定義個(gè)性頭像和登陸風(fēng)格; 2)發(fā)帖回復(fù)功能:可以發(fā)新信息(新帖)、回復(fù)(跟隨)等,可以發(fā)起投票統(tǒng)計(jì)并自動(dòng)統(tǒng)計(jì)調(diào)查結(jié)果,可提供圖形化顯示功能;
3)短消息功能:用戶可以在論壇內(nèi)部相互發(fā)送短消息,系統(tǒng)自動(dòng)提示未讀短消息;
4)論壇公告功能:管理員可以發(fā)布各類論壇公告,最新公告以滾動(dòng)條的形式出現(xiàn)在論壇最上方;
5)設(shè)定分論壇功能:管理員可自由設(shè)定分論壇的主題,可同時(shí)設(shè)置多個(gè)論壇,每個(gè)分論壇都具有定時(shí)開(kāi)通功能。可為每個(gè)分論壇配置版主(分論壇管理員); 6)內(nèi)容安全過(guò)濾:系統(tǒng)對(duì)網(wǎng)友的發(fā)言進(jìn)行過(guò)濾,系統(tǒng)可設(shè)定某些關(guān)鍵字(例如“法輪功”)進(jìn)行報(bào)警或自動(dòng)用“*”號(hào)替換,系統(tǒng)對(duì)報(bào)警的信息自動(dòng)添加特別記號(hào)重點(diǎn)標(biāo)明; 7)人工審核功能:所有的網(wǎng)友發(fā)言信息必須經(jīng)過(guò)管理員審核通過(guò)才能發(fā)布,提供“控制開(kāi)關(guān)”,即如果審核通過(guò),點(diǎn)“通過(guò)”按鈕即可,需要?jiǎng)h除的點(diǎn)“刪除”按鈕即可;
8)論壇檢索功能:可以根據(jù)發(fā)帖的主題、內(nèi)容關(guān)鍵字、作者、分論壇等信息搜索論壇內(nèi)已有的文章;
9)定時(shí)開(kāi)通功能:管理員可控制論壇的開(kāi)通和關(guān)閉,可設(shè)定關(guān)閉后不可再發(fā)帖或不可再訪問(wèn);
10)用戶系統(tǒng)檢測(cè):系統(tǒng)可自動(dòng)檢測(cè)在線用戶IP地址、操作系統(tǒng)、瀏覽器版本并可顯示所有在線用戶; 11)生日提醒功能:根據(jù)注冊(cè)用戶填寫的注冊(cè)信息,在用戶生日到來(lái)時(shí)自動(dòng)提醒; 12)論壇在線統(tǒng)計(jì):自動(dòng)統(tǒng)計(jì)在線用戶數(shù)并列表顯示在線用戶;自動(dòng)統(tǒng)計(jì)用戶的發(fā)帖數(shù)、跟帖數(shù)(回復(fù)數(shù))、訪問(wèn)次數(shù)和點(diǎn)擊量。
第三篇:重郵51單片機(jī)課程設(shè)計(jì)報(bào)告(推薦)
重郵專用
51單片機(jī)課程設(shè)計(jì)報(bào)告
學(xué)院:
專業(yè)班級(jí):姓名:
指導(dǎo)教師:
設(shè)計(jì)時(shí)間:
51單片機(jī)課程設(shè)計(jì)
一、設(shè)計(jì)任務(wù)與要求
1.任務(wù):制作并調(diào)試51單片機(jī)學(xué)習(xí)板 2.要求:
(1)了解并能識(shí)別學(xué)習(xí)板上的各種元器件,會(huì)讀元器件標(biāo)示;(2)會(huì)看電路原理圖;
(3)制作51單片機(jī)學(xué)習(xí)板;
(4)學(xué)會(huì)使用Keil C軟件下載調(diào)試程序;
用調(diào)試程序?qū)?1單片機(jī)學(xué)習(xí)板調(diào)試成功。
二、總原理圖及元器件清單
1.總原理圖
要求:用鉛筆在A4紙整頁(yè)繪制
2.元件清單
三、模塊電路分析
1.最小系統(tǒng):
單片機(jī)最小系統(tǒng)電路分為振蕩電路和復(fù)位電路,振蕩電路選用 12MHz 高精度晶振, 振蕩電容選用 22p和30p 獨(dú)石電容;
晶振為單片機(jī)提供時(shí)鐘激勵(lì),保證單片機(jī)內(nèi)部和外部電路的時(shí)序邏輯電路協(xié)調(diào)動(dòng)作,課程中使用的是12M的晶振,可以產(chǎn)生每秒12M頻率的激
勵(lì)。而構(gòu)成振蕩回路的倆個(gè)電容為負(fù)載電容,可以影響晶振的諧振頻率和振蕩幅度。
圖 1圖
2復(fù)位電路使用 RC 電路,使用普通的電解電容與金屬膜電阻即可;
圖
3當(dāng)單片機(jī)上電瞬間由于電容電壓不能突變會(huì)使電容兩邊的電位相同,此時(shí)RST為高電平,之后隨著時(shí)間推移電源負(fù)極通過(guò)電阻對(duì)電容放電,放完電時(shí)RST為低電平。正常工作為低電平,高電平復(fù)位。(分析振蕩電路:測(cè)振蕩頻率; 分析復(fù)位電路:高或低電平復(fù)位?)
2.顯示模塊:
發(fā)光二極管顯示電路:
Usb的為系統(tǒng)加電時(shí),power的發(fā)光二極管處于高電位,發(fā)光。當(dāng)程序控制其余四個(gè)腳的電位為低電位,輸出端口為高電位,剩下的四個(gè)發(fā)光二極管發(fā)光
圖
4數(shù)碼管顯示電路
本課程使用數(shù)碼管顯示狀態(tài)為靜態(tài)顯示。靜態(tài)顯示就是顯示驅(qū)動(dòng)電路具有
輸出鎖存功能。單片機(jī)將所要顯示的數(shù)據(jù)輸出后,數(shù)碼管顯示數(shù)據(jù)不變。Cpu不再控制led。靜態(tài)顯示的接口電路采用一個(gè)并行口接一個(gè)數(shù)碼管。數(shù)碼管的公共端按共陰極或共陽(yáng)極分別接地或
VCC
圖
5四、硬件調(diào)試
1、是否短路
用萬(wàn)用表檢查P2兩端是短路。電阻為0,則短路,電阻為一適值,電路正常。
2、焊接順序
焊接的順序很重要,按功能劃分的器件進(jìn)行焊接,順序是功能部件的焊接--調(diào)試--另一功能部件的焊接,這樣容易找到問(wèn)題的所在。
3、器件功能
1)檢查原理圖連接是否正確
2)檢查原理圖與PCB圖是否一致
3)檢查原理圖與器件的DATASHEET上引腳是否一致 4)用萬(wàn)用表檢查是否有虛焊,引腳短路現(xiàn)象
5)查詢器件的DATASHEET,分析一下時(shí)序是否一致,同時(shí)分析一下命令字是否正確
6)通過(guò)示波器對(duì)芯片各個(gè)引腳進(jìn)行檢查,檢查地址線是否有信號(hào)的7)飛線。用別的的口線進(jìn)行控制,看看能不能對(duì)其進(jìn)行正常操作,多試驗(yàn),才能找到問(wèn)題出現(xiàn)在什么地方。
六、軟件調(diào)試
1、設(shè)置硬件仿真環(huán)境
單片機(jī)應(yīng)用系統(tǒng)程序的編譯和仿真在KeilμVision環(huán)境下進(jìn)行,在調(diào)試程序之前,需要對(duì)工程進(jìn)行Debug設(shè)置,選擇軟件仿真或硬件仿真。軟件仿真使用計(jì)算機(jī)來(lái)模擬程序的運(yùn)行,不需要建立硬件平臺(tái)就可以快速得到某些運(yùn)行結(jié)果;硬件仿真是最準(zhǔn)確的仿真方法,必須建立硬件平臺(tái),通過(guò)PC機(jī)→硬件仿真器→用戶目標(biāo)系統(tǒng)進(jìn)行系統(tǒng)調(diào)試。采用硬件仿真的方法,硬件平臺(tái)即為帶有圖1所示接口電路的單片機(jī)應(yīng)用系統(tǒng),設(shè)置硬件仿真環(huán)境的具體操作步驟如下:
首先,點(diǎn)擊所建工程:Project菜單中的Options for Target?Targer 1?,出現(xiàn)工程的配置窗口,點(diǎn)擊Debug設(shè)置,選擇KeilMcmitor-51 Driver,具體參數(shù)設(shè)置如圖6所示。
圖 6
然后,設(shè)置仿真器參數(shù)。建議波特率設(shè)置范圍300~38 400。為避免程序中的中斷和Keil硬件仿真環(huán)境中的中斷互相沖突,不選擇“Stop ProgramExecution with SerialInterrupt”。仿真器參數(shù)的設(shè)置如圖7所示。
圖7
完成51單片機(jī)在Keil μVision環(huán)境中的硬件仿真環(huán)境設(shè)置后,可以進(jìn)行程序的調(diào)試仿真。
2、調(diào)試仿真
1)導(dǎo)入測(cè)試代碼:文件→打開(kāi)→key and display.Uv2 2)重建全部工程:工程→重建全部目標(biāo)文件
重建結(jié)果為,“DA_5615” – 0 Error(s), 0 Warning(s).3)調(diào)試:調(diào)試→Start/Stop Debug session(Ctrl + F5)
調(diào)試結(jié)果為:Connected to Monitor_51 V3.4Load “C:......DA_56511、詳細(xì)描述軟件調(diào)試步驟。及各模塊調(diào)試結(jié)果。
2、詳細(xì)描述調(diào)試過(guò)程中出現(xiàn)的故障現(xiàn)象,并作故障分析,及解決方法
七、心得
自己寫啦~~
第四篇:操作系統(tǒng)課程設(shè)計(jì)報(bào)告
課程設(shè)計(jì)報(bào)告
題 目: 模擬請(qǐng)求頁(yè)式管理
課程名稱: 計(jì)算機(jī)操作系統(tǒng) 學(xué) 院: 信息工程學(xué)院
專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)
班 級(jí): 14計(jì)本(1)學(xué)生姓名: * * * 學(xué) 號(hào): 201403031** 指導(dǎo)教師: * * 成 績(jī):
開(kāi)課時(shí)間: 2016-2017 學(xué)年 一 學(xué)期
模擬請(qǐng)求頁(yè)式管理
第1章 需求分析
1.1設(shè)計(jì)要求
請(qǐng)求頁(yè)式管理是一種常用的虛擬存儲(chǔ)管理技術(shù)。本設(shè)計(jì)通過(guò)請(qǐng)求頁(yè)式存儲(chǔ)管理中頁(yè)面置換算法模擬設(shè)計(jì),了解虛擬存儲(chǔ)技術(shù)的特點(diǎn),掌握請(qǐng)求頁(yè)式管理的頁(yè)面置換算法。本實(shí)驗(yàn)要求用Vc++或其他高級(jí)語(yǔ)言編寫和調(diào)試。
編寫程序?qū)崿F(xiàn):
(1)先進(jìn)先出頁(yè)面置換算法(FIFO)(2)最近最久未使用頁(yè)面置換算法(LRU)最佳置換頁(yè)面置換算法(OPT)設(shè)計(jì)一個(gè)虛擬存儲(chǔ)區(qū)和內(nèi)存工作區(qū),編程序演示以上三種算法的具體實(shí)現(xiàn)過(guò)程,并計(jì)算訪問(wèn)命中率。
1.2解決方案
首先確定實(shí)現(xiàn)語(yǔ)言使用c#實(shí)現(xiàn)圖形化界面,后確定要實(shí)現(xiàn)哪些功能,比如算法選擇,頁(yè)面添加,模擬控制。然后確定輸出結(jié)構(gòu)以便于程序的測(cè)試和驗(yàn)證。將基本框架建立后再進(jìn)行編程。編程前進(jìn)行算法結(jié)構(gòu)分析最后編程實(shí)現(xiàn)。
1.3算法實(shí)現(xiàn)原理
1、先進(jìn)先出置換算法(FIFO):
發(fā)生缺頁(yè)中斷時(shí)按照頁(yè)面進(jìn)入內(nèi)存順序總是淘汰最先進(jìn)入內(nèi)存的頁(yè)面。
2、最近最久未使用置換算法(LRU):
發(fā)生缺頁(yè)中斷時(shí)總是淘汰存在內(nèi)存中最長(zhǎng)時(shí)間未被使用的頁(yè)面。
3、最佳置換算法(OPT):
發(fā)生缺頁(yè)中斷時(shí)若一個(gè)或幾個(gè)頁(yè)面將來(lái)將不會(huì)被調(diào)用則按先進(jìn)先出原則淘汰頁(yè)面,若將來(lái)都有調(diào)用則比較調(diào)用時(shí)刻選擇最遠(yuǎn)時(shí)刻頁(yè)面淘汰。
4、缺頁(yè)率:缺頁(yè)次數(shù)占頁(yè)面調(diào)用次數(shù)的百分比。
第2章 概要設(shè)計(jì)
2.1數(shù)據(jù)設(shè)計(jì)
常變量:調(diào)用頁(yè)面最大數(shù)量(MaxN),內(nèi)存最大頁(yè)面數(shù)(MaxM)待調(diào)用頁(yè)面數(shù)組:page_dd[MaxN]存放等待調(diào)用的頁(yè)面號(hào)
頁(yè)面數(shù)組專用指針 page_p,用于指向page_dd數(shù)組中正需調(diào)入內(nèi)存的頁(yè)號(hào) 內(nèi)存塊數(shù)組:Memery[MaxM],存放內(nèi)存當(dāng)前存放的頁(yè)號(hào) 缺頁(yè)計(jì)數(shù)器:count,記錄缺頁(yè)次數(shù)
內(nèi)存塊狀態(tài)數(shù)組:M1[MaxN],M2[MaxN],M3[MaxN],記錄每次頁(yè)面調(diào)用結(jié)束后內(nèi)存各塊的狀態(tài)
缺頁(yè)記錄數(shù)組s[MaxN],用于記錄頁(yè)面調(diào)用時(shí)是否產(chǎn)生缺頁(yè)中斷,初始化為是
2.2函數(shù)設(shè)計(jì)
1、頁(yè)面添加函數(shù):void btnAdd_Click(object sender, EventArgs e)用于實(shí)現(xiàn)通過(guò)點(diǎn)擊按鈕實(shí)現(xiàn)數(shù)據(jù)輸入。
2、內(nèi)存初始化函數(shù):init(int[] a, int[] b,int []m1,int[]m2,int[]m3)參數(shù)有頁(yè)面數(shù)組、內(nèi)存數(shù)組、狀態(tài)數(shù)組,采用先進(jìn)先出算法對(duì)內(nèi)存先進(jìn)行裝滿 服務(wù)于先進(jìn)先出頁(yè)面置換函數(shù)和最佳置換函數(shù)。
3、輸出函數(shù):void display(int[]a,int[]m1,int[]m2,int[]m3,char[]c)用于輸出模擬結(jié)果,參數(shù)有頁(yè)面數(shù)組,內(nèi)存數(shù)組,狀態(tài)數(shù)組,缺頁(yè)記錄數(shù)組。再模擬之后調(diào)用。
4、模擬控制函數(shù):void btnmo_Click(object sender, EventArgs e)用于實(shí)現(xiàn)通過(guò)單擊模擬按鈕,根據(jù)用戶所選算法進(jìn)行模擬并顯示結(jié)果。
5、先進(jìn)先出算法模擬函數(shù):
void FIFO(int[] a, int[] b,int[]m1,int[]m2,int[]m3,char[] s)用于實(shí)現(xiàn)先進(jìn)先出算法模擬,參數(shù)有頁(yè)面數(shù)組,內(nèi)存數(shù)組、內(nèi)存狀態(tài)記錄數(shù)組,缺頁(yè)記錄數(shù)組。在模擬函數(shù)中調(diào)用。
6、最近最久未使用算法模擬函數(shù):
void LRU(int[] a, int[] b, int[] m1, int[] m2, int[] m3, char[] s)用于 3 實(shí)現(xiàn)最近最久未使用算法模擬,參數(shù)有頁(yè)面數(shù)組,內(nèi)存數(shù)組,內(nèi)存狀態(tài)記錄數(shù)組,缺頁(yè)記錄數(shù)組。在模擬函數(shù)中被調(diào)用。
7、最近最久未使用函數(shù)輔助函數(shù):void LUR_I(int[] a,int e)用于對(duì)最近最久未使用算法中所用輔助數(shù)組(記錄頁(yè)面存在時(shí)長(zhǎng))進(jìn)行調(diào)整,參數(shù)有輔助數(shù)組及需調(diào)整的數(shù)據(jù)下標(biāo)。在最近最久未使用函數(shù)中調(diào)用。
8、最佳置換算法模擬函數(shù):
void OPT(int[] a, int[] b, int[] m1, int[] m2, int[] m3, char[] s)用于模擬最佳置換算法。參數(shù)有頁(yè)面數(shù)組,內(nèi)存數(shù)組,內(nèi)存狀態(tài)記錄數(shù)組,缺頁(yè)記錄數(shù)組。在模擬函數(shù)中被調(diào)用。
9、最佳置換算法輔助函數(shù):void OPT_F(int[] a, int e)用于對(duì)最佳置換算法中的輔助數(shù)組進(jìn)行調(diào)整。參數(shù)有輔助數(shù)組,需調(diào)整數(shù)據(jù)下標(biāo)。在最佳置換算法中被調(diào)用。
10、重置函數(shù):void btncz_Click(object sender, EventArgs e)用于重新選擇算法進(jìn)行新的模擬。
2.3主要算法設(shè)計(jì)
1、初始化函數(shù)算法:
第一步:將第一個(gè)頁(yè)面調(diào)入內(nèi)存,調(diào)整最佳置換算法輔助數(shù)組,缺頁(yè)計(jì)數(shù)器加一,保存內(nèi)存數(shù)組狀態(tài)。
第二步:調(diào)用下一個(gè)頁(yè)面并判斷內(nèi)存中是否有本頁(yè)面有轉(zhuǎn)第三步,無(wú)轉(zhuǎn)第四步。第三步:更改缺頁(yè)數(shù)組對(duì)應(yīng)下標(biāo)值,記錄當(dāng)前內(nèi)存狀態(tài),調(diào)整最佳置換算法輔助數(shù)組,頁(yè)面指針指向下一頁(yè)。
第四步:將頁(yè)面調(diào)入內(nèi)存,調(diào)整最佳置換算法輔助函數(shù),缺頁(yè)計(jì)數(shù)器加一,保存內(nèi)存數(shù)組狀態(tài)。若內(nèi)存尚不滿轉(zhuǎn)第一步。具體見(jiàn)圖1初始化算法流程圖。
開(kāi)始頁(yè)面調(diào)入內(nèi)存缺頁(yè)計(jì)數(shù)器加一記錄內(nèi)存狀態(tài)調(diào)用下一頁(yè)否否內(nèi)存是否有該頁(yè)面是記錄內(nèi)存狀態(tài)修改缺頁(yè)數(shù)組內(nèi)存已滿是結(jié)束
圖1 初始化算法流程圖
2、先進(jìn)先出頁(yè)面置換算法:
第一步:檢查內(nèi)存中是否已有需調(diào)用頁(yè)面,有則轉(zhuǎn)第二步,無(wú)則轉(zhuǎn)第三步。第二步:記錄當(dāng)前內(nèi)存狀態(tài),修改缺頁(yè)數(shù)組對(duì)應(yīng)下標(biāo)值。
第三步:內(nèi)存中無(wú)需要調(diào)用的頁(yè)面,進(jìn)行出隊(duì)操作,然后進(jìn)行入隊(duì)操作,記錄內(nèi)存塊狀態(tài),缺頁(yè)計(jì)數(shù)器加一。
第四步:若頁(yè)面數(shù)組未被調(diào)用結(jié)束轉(zhuǎn)第一步。具體見(jiàn)圖2先進(jìn)先出算法流程圖。
開(kāi)始頁(yè)面調(diào)入內(nèi)存該頁(yè)在內(nèi)存中是否已存在是否否先出隊(duì)操作后入隊(duì)操作記錄內(nèi)存狀態(tài)修改缺頁(yè)數(shù)組值記錄內(nèi)存狀態(tài)缺頁(yè)計(jì)數(shù)器加一頁(yè)面調(diào)用結(jié)束是結(jié)束
圖2 先進(jìn)先出算法流程圖
3、最近最久未使用置換算法:
第一步:將頁(yè)面調(diào)入內(nèi)存,記錄內(nèi)存狀態(tài),缺頁(yè)計(jì)數(shù)器加一,調(diào)整輔助數(shù)組,頁(yè)面指針加一。
第二步:檢查內(nèi)存中是否已有所需頁(yè)面,有轉(zhuǎn)第三步,無(wú)轉(zhuǎn)第一步。
第三步:修改缺頁(yè)數(shù)組對(duì)應(yīng)下標(biāo)記錄,記錄內(nèi)存狀態(tài),調(diào)整輔助數(shù)組,頁(yè)面指針加一。第四步:內(nèi)存是否已滿,無(wú)則轉(zhuǎn)第一步,是則轉(zhuǎn)第五步。
第五步:檢查內(nèi)存中是否有所需頁(yè)面,有則記錄當(dāng)前內(nèi)存狀態(tài),修改缺頁(yè)數(shù)組對(duì)應(yīng)下標(biāo)值。無(wú)則轉(zhuǎn)第六步。
第六步:檢查輔助數(shù)組找出最大值并記錄其下標(biāo),置換內(nèi)存中對(duì)應(yīng)下標(biāo)的數(shù)據(jù),調(diào)整輔助數(shù)組,缺頁(yè)計(jì)數(shù)器加一。
第七步:頁(yè)面是否調(diào)用結(jié)束未結(jié)束則轉(zhuǎn)第五步。具體見(jiàn)圖3最近最久未使用算法流程圖。
開(kāi)始調(diào)入頁(yè)面至內(nèi)存記錄內(nèi)存狀態(tài)計(jì)數(shù)器加一否調(diào)整輔助數(shù)組調(diào)用下一頁(yè)內(nèi)存中是否已有該頁(yè)否內(nèi)存已滿是通過(guò)輔助數(shù)組確定淘汰頁(yè)面是修改缺頁(yè)數(shù)組記錄內(nèi)存狀態(tài)調(diào)整輔助數(shù)組否頁(yè)面置換記錄內(nèi)存狀態(tài)計(jì)數(shù)器加一調(diào)用結(jié)束是結(jié)束
圖3 最近最久未使用算法
4、最佳置換算法:
第一步:檢查內(nèi)存中是否已有所需頁(yè)面,有則記錄內(nèi)存狀態(tài),修改缺頁(yè)數(shù)組對(duì)應(yīng)下標(biāo)數(shù)值。無(wú)則轉(zhuǎn)第二步。
第二步:判斷內(nèi)存中各頁(yè)面的未來(lái)調(diào)用情況,記錄是否還有調(diào)用,若有則記錄調(diào)用時(shí)刻。
第三步:分析調(diào)用情況,內(nèi)存中頁(yè)面都在將來(lái)不會(huì)被調(diào)用轉(zhuǎn)第四步,有一個(gè)被調(diào)用轉(zhuǎn)第五步,有兩個(gè)被調(diào)用轉(zhuǎn)第六步,全被調(diào)用轉(zhuǎn)第七步。
第四步:查找輔助數(shù)組找到內(nèi)存中存在時(shí)間最長(zhǎng)的頁(yè)面進(jìn)行置換,修改內(nèi)存狀態(tài),缺頁(yè)計(jì)數(shù)器加一,修改輔助數(shù)組。
第五步:查找到不會(huì)被調(diào)用的頁(yè)面,并根據(jù)輔助數(shù)組選擇最早進(jìn)入內(nèi)存的頁(yè)面將其置換。修改內(nèi)存狀態(tài),缺頁(yè)計(jì)數(shù)器加一,修改輔助數(shù)組。
第六步:查找輔助數(shù)組找到將來(lái)不需要在調(diào)用的頁(yè)面將其置換,修改輔助數(shù)組,記錄內(nèi)存狀態(tài),缺頁(yè)計(jì)數(shù)器加一。
第七步:查找輔助數(shù)組,找尋最晚被調(diào)用的頁(yè)面,將其置換。記錄內(nèi)存狀態(tài),修改輔助數(shù)組,缺頁(yè)計(jì)數(shù)器加一。
第八步:頁(yè)面是否調(diào)用完成,否則轉(zhuǎn)第一步。具體見(jiàn)圖4最佳置換算法流程圖
開(kāi)始調(diào)入頁(yè)面記錄內(nèi)存狀態(tài)計(jì)數(shù)器加一更新輔助函數(shù)是頁(yè)面已存在否向后檢查內(nèi)存當(dāng)前頁(yè)面調(diào)用情況所有頁(yè)面都不會(huì)再度調(diào)用否是一個(gè)頁(yè)面會(huì)調(diào)用否否是兩個(gè)頁(yè)面會(huì)調(diào)用是否查找輔助數(shù)組得到最先進(jìn)入頁(yè)面通過(guò)輔助數(shù)組得到不會(huì)再調(diào)用的頁(yè)面通過(guò)輔助數(shù)組獲取最晚調(diào)用的頁(yè)面通過(guò)輔助數(shù)組得到另外兩個(gè)頁(yè)面中最先進(jìn)入的頁(yè)面置換頁(yè)面記錄內(nèi)存狀態(tài)計(jì)數(shù)器加一更新輔助函數(shù)頁(yè)面調(diào)用結(jié)束是結(jié)束
圖4 最佳置換算法流程圖 2.4界面設(shè)計(jì)
采用c# 設(shè)計(jì)windows窗體應(yīng)用程序,使用下拉列表框選擇算法,通過(guò)按鈕添加待調(diào)用的頁(yè)面。通過(guò)文本控件顯示模擬結(jié)果。顯示樣式:第一行:算法名稱;
第二行:調(diào)用頁(yè)面順序;
第三行至第五行顯示內(nèi)存在每調(diào)用一次頁(yè)面后的狀態(tài);
第六行:是否缺頁(yè);
最后一行顯示缺頁(yè)率;
第3章 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)
3.1函數(shù)設(shè)計(jì)
1、添加按鈕功能實(shí)現(xiàn)代碼
主要功能:實(shí)現(xiàn)單擊一次添加一個(gè)調(diào)用頁(yè)面,并給出相應(yīng)的提示,如正在輸入的是第幾次調(diào)度頁(yè)面,在輸入為空時(shí)能夠彈出對(duì)話框提示用戶,在輸入完成時(shí)為避免數(shù)組越界應(yīng)在輸入完成時(shí)隱藏;輸入過(guò)程中始終保證時(shí)輸入焦點(diǎn)。private void btnAdd_Click(object sender, EventArgs e){ if(txtAdd.Text!= “")//輸入不為空才能繼續(xù)輸入 { page_dd[i_add] = Convert.ToInt32(txtAdd.Text);/*將輸入值賦值給頁(yè)面數(shù)組*/ txtShow.Text += txtAdd.Text + ” “;/*顯示供用戶查閱*/ i_add++;txtAdd.Clear();/*清空*/ if(i_add == MaxN)//輸入結(jié)束時(shí) { txtAdd.ReadOnly = true;//不允許繼續(xù)輸入 btnAdd.Hide();//按鈕隱藏 return;} txtAdd.Focus();//設(shè)置為輸入焦點(diǎn)
label2.Text = ”第“ +(i_add + 1)+ ”次調(diào)度頁(yè)面:“;/*提示用戶正在輸入的是第幾次調(diào)度頁(yè)面*/ } /*輸入為空則彈出對(duì)話框提示用戶輸入為空*/ else { MessageBox.Show(”請(qǐng)輸入調(diào)用頁(yè)面!“, ”輸入為空“, MessageBoxButtons.OK, MessageBoxIcon.Warning);txtAdd.Focus();} }
2、初始化函數(shù)
主要功能:將內(nèi)存一先進(jìn)先出方式填滿,并記錄每個(gè)頁(yè)面進(jìn)入時(shí)間,服務(wù)于先進(jìn)先出頁(yè)面置換算法和最佳置換算法。
void init(int[] a, int[] b,int []m1,int[]m2,int[]m3){ /*內(nèi)存未滿時(shí)循環(huán)*/ for(int i = 0;i < MaxM&&page_p //調(diào)整輔助數(shù)組將剛進(jìn)入內(nèi)存的頁(yè)面的對(duì)應(yīng)時(shí)間 OPT_F(O_Q ,i); count++;//缺頁(yè)計(jì)數(shù)器加一 m1[page_p] = b[0];//保存內(nèi)存狀態(tài) m2[page_p] = b[1];m3[page_p] = b[2];page_p++;//調(diào)用下一頁(yè)面 //檢查內(nèi)存中是否原先就有需要的頁(yè)面; for(int j = 0;j <= i&&page_p s[page_p] = 'F';//缺頁(yè)數(shù)組對(duì)應(yīng)數(shù)據(jù)更改 m1[page_p] = b[0];//記錄內(nèi)存狀態(tài) m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q,-1);//調(diào)整最佳置換算法輔助函數(shù) page_p++;//調(diào)用下一頁(yè) j =-1;//重新開(kāi)始尋找 } } } } 3、先進(jìn)先出頁(yè)面置換函數(shù) 主要功能:根據(jù)先進(jìn)先出算法要求在產(chǎn)生缺頁(yè)中斷時(shí)采用先進(jìn)先出方式確定淘汰頁(yè)面,并在每次頁(yè)面調(diào)用時(shí)記錄下內(nèi)存狀態(tài),缺頁(yè)次數(shù);采用循環(huán)隊(duì)列使得每次出隊(duì)的一定是最先進(jìn)入內(nèi)存的。 private void FIFO(int[] a, int[] b,int[]m1,int[]m2,int[]m3,char[] s){ int Fpage_p = page_p;int front, rear;//定義隊(duì)列對(duì)手和對(duì)尾指針并初始化 front = 0;rear = MaxM1;int sa;for(;Fpage_p < MaxN;Fpage_p++){ sa = 0;for(int i = 0;i < MaxM;i++)//檢查內(nèi)存中是否已有要調(diào)用的頁(yè)面。 { if(b[i] == a[Fpage_p]){ m1[Fpage_p] = b[0];m2[Fpage_p] = b[1];m3[Fpage_p] = b[2];s[Fpage_p] = 'F';sa = 1;break;} } if(sa == 0){ front =(front + 1)% MaxM; rear =(rear + 1)% MaxM;b[rear] = a[Fpage_p];m1[Fpage_p] = b[0];m2[Fpage_p] = b[1];m3[Fpage_p] = b[2];count++;} else continue;} } /*最近最久未使用算法輔助數(shù)組調(diào)整函數(shù)*/ private void LUR_I(int[] a,int e){ int temp;temp = a[e];a[e] = 1;for(int i = 0;i < MaxM;i++){ if(a[i] < temp && i!=e)a[i]++;} } /*最佳置換算法輔助數(shù)組調(diào)整函數(shù)*/ private void OPT_F(int[] a, int e){ if(e!=-1){ a[e] = 0;for(int i = 0;i < MaxM;i++){ if(i!= e)a[i]++;} } else for(int i = 0;i < MaxM;i++){ a[i]++;} } /*最近最久未使用算法*/ private void LRU(int[] a, int[] b, int[] m1, int[] m2, int[] m3, char[] s){ int[] L_Q = new int[MaxM]{3,3,3};int sa;for(int i = 0;i < MaxM && page_p < MaxN;i++){ b[i] = a[page_p];//調(diào)入內(nèi)存 count++;m1[page_p] = b[0];//保存內(nèi)存狀態(tài) m2[page_p] = b[1];m3[page_p] = b[2];LUR_I(L_Q, i);page_p++;for(int j = 0;j <= i && page_p < MaxN;j++){ if(b[j] == a[page_p]){ s[page_p] = 'F';m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];LUR_I(L_Q, j);page_p++;j =-1;} } } for(;page_p < MaxN;page_p++){ sa = 0;for(int i = 0;i < MaxM;i++)//用的頁(yè)面。{ if(b[i] == a[page_p]){ m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];s[page_p] = 'F';LUR_I(L_Q, i);sa = 1;break;} } if(sa == 0){ 檢查內(nèi)存中是否已有要調(diào)40 for(int i = 0;i < MaxM;i++){ if(L_Q[i] == 3){ b[i] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];LUR_I(L_Q, i);break;} } count++;} else continue;} } /*最佳置換算法*/ private void OPT(int[] a, int[] b, int[] m1, int[] m2, int[] m3, char[] s){ int sa;int O_p;int Ocount;int[] OPT_I=new int [MaxM ]{-1 ,-1 ,-1 };int[] OPT_J=new int [MaxM]{MaxN ,MaxN ,MaxN };for(;page_p < MaxN;page_p++){ for(int i = 0;i < MaxM;i++){ OPT_I[i] =-1;//刷新?tīng)顟B(tài)數(shù)組 OPT_J[i] = MaxN;} sa = 0;for(int i = 0;i < MaxM;i++)//檢查內(nèi)存中是否已有要調(diào)用的頁(yè)面。 { if(b[i] == a[page_p]){ m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q,-1); s[page_p] = 'F';sa = 1;break;} } if(sa == 0)//缺頁(yè) { Ocount = 0;for(int i = 0;i < MaxM;i++){ O_p = page_p + 1;for(;O_p < MaxN;O_p++){ if(b[i] == a[O_p]){ Ocount++;OPT_I[i] = 1;OPT_J[i] = O_p;break;} } } switch(Ocount){ case 0://全部頁(yè)面以后都不會(huì)再度調(diào)用 int temp = 0;for(int i = 0;i < MaxM;i++){ if(O_Q[i] > O_Q[temp])temp = i;} b[temp] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q ,temp);count++;break;case 1://有一個(gè)頁(yè)面將在以后調(diào)用 temp = 0;for(int i = 0;i < MaxM;i++){ if(OPT_I[i]!= 1 && O_Q[i] > O_Q[temp])temp = i; } b[temp] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q ,temp);count++;break;case 2: for(int i = 0;i < MaxM;i++){ if(OPT_I[i] ==-1){ b[i] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q, i);count++;} } break;case 3: int p = 0;for(int i = 0;i < MaxM;i++){ if(OPT_J[i] >OPT_J[p])p = i;} b[p] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q, p);count++;break;} } } } /*重置函數(shù)*/ private void btncz_Click(object sender, EventArgs e){ comboBox1.SelectedIndex = 0; txtAdd.Text = ”“;page_p = 0;i_add = 0;count = 0;//txtShow.Text = ”";for(int i = 0;i < MaxM;i++)Memery[i] =-1;for(int i = 0;i < MaxN;i++)s[i] = 'T';} } } 操 作 系 統(tǒng) 課 程 設(shè) 計(jì) 實(shí) 驗(yàn) 報(bào) 告 學(xué)院:計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 班級(jí):計(jì)112 學(xué)號(hào):1113022032 姓名: 一、實(shí)驗(yàn)名稱: 用C++實(shí)現(xiàn)驅(qū)動(dòng)調(diào)度算法、頁(yè)面替換算法、銀行家算法、處理器調(diào)度算法 二、實(shí)驗(yàn)要求: 書寫實(shí)驗(yàn)報(bào)告,包括的內(nèi)容有: (1)實(shí)驗(yàn)題目 (2)程序中使用的數(shù)據(jù)結(jié)構(gòu)及主要文字說(shuō)明 (3)帶有注釋的源程序 (4)執(zhí)行程序說(shuō)明,表明各進(jìn)程控制快的初始狀態(tài),以及各算法的運(yùn)行狀態(tài) (5)通過(guò)實(shí)驗(yàn)后的收獲與體會(huì)及對(duì)實(shí)驗(yàn)的改進(jìn)意見(jiàn)和見(jiàn)解 二、實(shí)驗(yàn)?zāi)康模?/p> 通過(guò)自己編程來(lái)實(shí)現(xiàn)各類操作系統(tǒng)算法,進(jìn)一步理解操作系統(tǒng)的概念及含義,提高對(duì)操作系統(tǒng)的認(rèn)識(shí),同時(shí)提高自己的動(dòng)手實(shí)踐能力。加強(qiáng)我們對(duì)各類算法的理解。 三、實(shí)驗(yàn)內(nèi)容: 1、實(shí)現(xiàn)頁(yè)面替換算法 (1)FIFO 先進(jìn)先出頁(yè)面替換算法 (2)LRU最近最少使用頁(yè)面替換算法 (3)LFU最少使用頻率頁(yè)面替換算法 2、銀行家算法 3、實(shí)現(xiàn)驅(qū)動(dòng)調(diào)度算法 (1)先來(lái)先服務(wù)算法 (2)電梯算法 (3)掃描算法 4、實(shí)現(xiàn)處理器調(diào)度 (1)先進(jìn)先出處理器調(diào)度 (2)時(shí)間片輪轉(zhuǎn)法 (3)優(yōu)先級(jí)調(diào)度 四、實(shí)驗(yàn)原理: 1、頁(yè)面替換算法 先進(jìn)先出頁(yè)面置換算法:該算法總是淘汰最先進(jìn)入內(nèi)存的頁(yè)面,即選擇在內(nèi)存中駐留時(shí)間最久的頁(yè)面加以淘汰。將已調(diào)入內(nèi)存的頁(yè)面按先后次序鏈接成一個(gè)隊(duì)列,將最先調(diào)入的頁(yè)面與新頁(yè)面進(jìn)行置換 最近最久未使用置換算法:該算法是利用“最近的過(guò)去”作為“最近的將來(lái)”,將最近最久未使用的頁(yè)面加以淘汰。將已調(diào)入內(nèi)存的頁(yè)面按先后順序鏈接成一個(gè)隊(duì)列,為每一個(gè)頁(yè)面增加一個(gè)訪問(wèn)字段,用來(lái)記錄一個(gè)頁(yè)面自上次被訪問(wèn)以來(lái)所經(jīng)歷的是時(shí)間t,當(dāng)需淘汰一個(gè)頁(yè)面時(shí),選擇現(xiàn)有頁(yè)面中其t值最大,即最近最久未使用的頁(yè)面加以淘汰 2、銀行家算法 先對(duì)用戶提出的請(qǐng)求進(jìn)行合法性檢查,即檢查請(qǐng)求的是不大于需要的,是否不大于可利用的。若請(qǐng)求合法,則進(jìn)行試分配。最后對(duì)試分配后的狀態(tài)調(diào)用安全性檢查算法進(jìn)行安全性檢查。若安全,則分配,否則,不分配,恢復(fù)原來(lái)狀態(tài),拒絕申請(qǐng)。 3、驅(qū)動(dòng)調(diào)度算法 先進(jìn)先出算法(FIFO):總是嚴(yán)格按時(shí)間順序?qū)Υ疟P請(qǐng)求予以處理。算法實(shí)現(xiàn)簡(jiǎn)單、易于理解并且相對(duì)公平,不會(huì)發(fā)生進(jìn)程餓死現(xiàn)象。但該算法可能會(huì)移動(dòng)的柱面數(shù)較多并且會(huì) 經(jīng)常更換移動(dòng)方向,效率有待提高 電梯調(diào)度算法:總是將一個(gè)方向上的請(qǐng)求全部處理完后,才改變方向繼續(xù)處理其他請(qǐng)求。 掃描算法(scan algorithm):總是從最外向最內(nèi)(或最內(nèi)向最外)進(jìn)行掃描,然后在從最內(nèi)向最外(或最外向最內(nèi))掃描。該算法與電梯調(diào)度算法的區(qū)別是電梯調(diào)度在沒(méi)有最外或最內(nèi)的請(qǐng)求時(shí)不會(huì)移動(dòng)到最外或最內(nèi)柱面。 4、處理器調(diào)度算法 先進(jìn)先出處理器調(diào)度:按照作業(yè)進(jìn)入系統(tǒng)后備工作隊(duì)列的先后次序來(lái)挑選作業(yè),先進(jìn)入系統(tǒng)的作業(yè)將優(yōu)先被挑選進(jìn)入主存,創(chuàng)建用戶進(jìn)程,分配所需資源,然后移入就緒隊(duì)列。 時(shí)間片輪轉(zhuǎn)法調(diào)度算法:調(diào)度次序每次把CPU分配給就緒隊(duì)列進(jìn)程/線程使用規(guī) 定的時(shí)間間隔,就緒隊(duì)列中每個(gè)進(jìn)程/線程輪流的運(yùn)行一個(gè)時(shí)間片,當(dāng)時(shí)間片耗盡時(shí),就強(qiáng)迫當(dāng)前運(yùn)行進(jìn)程/線程讓出處理器,轉(zhuǎn)而排列到就緒隊(duì)列尾部,等候下一輪調(diào)度。 優(yōu)先級(jí)調(diào)度:根據(jù)確定的優(yōu)先級(jí)來(lái)選取進(jìn)程/線程,總是選擇就緒隊(duì)列中的優(yōu)先 級(jí)最高者投入運(yùn)行,即優(yōu)先級(jí)越高,先被調(diào)用。 五、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 對(duì)操作系統(tǒng)的各類算法設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)如下: 頁(yè)面替換算法:void FIFO();void LRU();void LFU(); 銀行家算法:void Init()初始化算法 void Bank()銀行家算法 bool Safe()安全性算法 驅(qū)動(dòng)調(diào)度算法: struct MagneticHead//磁頭構(gòu)成{ int site; int count; bool direct; }; struct Range//磁盤磁道范圍 { int mStart; int mEnd; }; struct RequestList//請(qǐng)求序列 { int site; bool state; }; struct Data//基本數(shù)據(jù)集合{ MagneticHead magneticHead; RequestList *requestList; int *executeList; Range range; int length; }; 處理器調(diào)度: typedef struct pcb//時(shí)間片輪轉(zhuǎn)法 { char pname[N]; int runtime; int arrivetime; char state; struct pcb*next; }PCB; typedef struct PCB1//先進(jìn)先出服務(wù) { char ID[3];//進(jìn)程號(hào) char name[10];//進(jìn)程名 char state;//運(yùn)行狀態(tài) floatarrivetime;//到達(dá)時(shí)間 floatstarttime;//進(jìn)程開(kāi)始時(shí)間 floatfinishtime;//進(jìn)程結(jié)束時(shí)間 floatservicetime;//服務(wù)時(shí)間 float turnaroundtime;//周轉(zhuǎn)時(shí)間 float weightedturnaroundtime;//帶權(quán)周轉(zhuǎn)時(shí)間 struct PCB1 *next;//指向下個(gè)進(jìn)程 }pcb1; struct pcb2 {優(yōu)先級(jí)調(diào)度 char name[10]; char state; int super; int ntime; int rtime; struct pcb2* link; }*ready=NULL,*d; typedef struct pcb2 PCB2; 六、課程設(shè)計(jì)總結(jié) 在本次課程設(shè)計(jì)中,就是講平時(shí)所做的實(shí)驗(yàn)結(jié)合起來(lái),實(shí)現(xiàn)操作系統(tǒng)的各類算法,了解操作系統(tǒng)的運(yùn)行原理以及其基本概念,更好的將操作系統(tǒng)的原理很好的展現(xiàn)出來(lái)。同時(shí),在本次實(shí)驗(yàn)中遇到了很多問(wèn)題,需要我們仔細(xì)的檢查和修改。其次,實(shí)驗(yàn)中為了能更好的體現(xiàn)各類算法的運(yùn)行情況,需要做一個(gè)清晰的界面,以能清楚地看出運(yùn)行結(jié)果。第五篇:操作系統(tǒng)課程設(shè)計(jì)報(bào)告