《MIS系统软件》实验指导书.docx
- 文档编号:30549148
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:18
- 大小:37.88KB
《MIS系统软件》实验指导书.docx
《《MIS系统软件》实验指导书.docx》由会员分享,可在线阅读,更多相关《《MIS系统软件》实验指导书.docx(18页珍藏版)》请在冰豆网上搜索。
《MIS系统软件》实验指导书
《MIS系统软件》实验指导书
课程名称:
MIS系统软件/OperationSystem
实验总学时数:
18
适应专业:
信息管理与信息系统
承担实验室:
管理学院计算机实验室
一、实验目的和任务
依据边学习、边实践的原则,让学生在学习过程中通过实验进一步巩固所学的理论与思想,培养学生的实际动手能力。
通过使用高级语言编写程序,加深对高级语言掌握和使用;通过用高级语言实现操作系统中的加密和进程管理的程序设计,从而加深对操作操作系统的理解和使用。
二、实验项目及学时分配
序号
实验项目名称
实验学时
实验类型
开出要求
1
加密解密算法
6
验证
必做
2
进程管理实验
12
综合
必做
三、参考资料
教材:
汤子瀛《计算机操作系统》
西安电子科技大学出版社2005年
实验指导书:
自编《MIS系统软件》实验指导2006年
参考书:
郁红英冯庚豹主编:
《计算机操作系统》
人民邮电出版社
LubomirF.BicAlanC.Shaw主编:
《操作系统原理》
清华大学出版社
庞丽萍主编:
《操作系统原理》
华中理工大学出版社
四、单项实验的内容和要求(包括实验所用的主要仪器设备,实验所需主要耗材)
实验一加密解密算法
1.实验目的与意义
1.通过简单的加密解密算法的实现理解系统中加密解密的基本思想
2.熟练掌握使用C语言基本语句
2.基本原理和方法
常见加密解密算法的实现思想
3.主要仪器设备及耗材
实验所用的主要仪器设备:
计算机(安装C语言)
实验所需主要耗材的品种及数量:
无
4.实验内容及步骤
(1)选定一种加密解密算法,对该算法实现的思路进行分析;
(2)编程实现选定的算法
(3)对所编写的程序进行调试
(4)对程序运行的结果进行截图
(5)对实验结果进行分析
5.部分参考代码
(1)单字母替换加密方法——字母倒排序
#defineM100
main()
{
ints,i,a;
charstr1[M]={'0'},str2[M]={'0'};
printf("menu\n");
printf("1.加密\n");
printf("2.解密\n");
printf("thewayyouchoose:
");
scanf("%d",&a);
switch(a)
{
case1:
{
printf("请输入要加密的原文\n");
gets(str1);
s=strlen(str1);
for(i=0;i
str2[i]=219-str1[i];
printf("得到密文是:
\n");
puts(str2);
}break;
case2:
{
printf("请输入要解密的密文:
\n");
gets(str1);
s=strlen(str1);
for(i=0;i
str2[i]=219-str1[i];
printf("得到原文:
\n");
puts(str2);
}break;
default:
printf("输入错误");
}
}
(2)kaiser加密算法
具体程序:
#include
#include
charencrypt(charch,intn)/*加密函数,把字符向右循环移位n*/
{
while(ch>='A'&&ch<='Z')
{
return('A'+(ch-'A'+n)%26);
}
while(ch>='a'&&ch<='z')
{
return('a'+(ch-'a'+n)%26);
}
returnch;
}
voidmenu()/*菜单,1.加密,2.解密,3.暴力破解,密码只能是数字*/
{
clrscr();
printf("\n=========================================================");
printf("\n1.Encryptthefile");
printf("\n2.Decryptthefile");
printf("\n3.Forcedecryptfile");
printf("\n4.Quit\n");
printf("=========================================================\n");
printf("Pleaseselectaitem:
");
return;
}
main()
{
inti,n;
charch0,ch1;
FILE*in,*out;
charinfile[20],outfile[20];
textbackground(BLACK);
textcolor(LIGHTGREEN);
clrscr();
sleep(3);/*等待3秒*/
menu();
ch0=getch();
while(ch0!
='4')
{
if(ch0=='1')
{
clrscr();
printf("\nPleaseinputtheinfile:
");
scanf("%s",infile);/*输入需要加密的文件名*/
if((in=fopen(infile,"r"))==NULL)
{
printf("Cannotopentheinfile!
\n");
printf("Pressanykeytoexit!
\n");
getch();
exit(0);
}
printf("Pleaseinputthekey:
");
scanf("%d",&n);/*输入加密密码*/
printf("Pleaseinputtheoutfile:
");
scanf("%s",outfile);/*输入加密后文件的文件名*/
if((out=fopen(outfile,"w"))==NULL)
{
printf("Cannotopentheoutfile!
\n");
printf("Pressanykeytoexit!
\n");
fclose(in);
getch();
exit(0);
}
while(!
feof(in))/*加密*/
{
fputc(encrypt(fgetc(in),n),out);
}
printf("\nEncryptisover!
\n");
fclose(in);
fclose(out);
sleep
(1);
}
if(ch0=='2')
{
clrscr();
printf("\nPleaseinputtheinfile:
");
scanf("%s",infile);/*输入需要解密的文件名*/
if((in=fopen(infile,"r"))==NULL)
{
printf("Cannotopentheinfile!
\n");
printf("Pressanykeytoexit!
\n");
getch();
exit(0);
}
printf("Pleaseinputthekey:
");
scanf("%d",&n);/*输入解密密码(可以为加密时候的密码)*/
n=26-n;
printf("Pleaseinputtheoutfile:
");
scanf("%s",outfile);/*输入解密后文件的文件名*/
if((out=fopen(outfile,"w"))==NULL)
{
printf("Cannotopentheoutfile!
\n");
printf("Pressanykeytoexit!
\n");
fclose(in);
getch();
exit(0);
}
while(!
feof(in))
{
fputc(encrypt(fgetc(in),n),out);
}
printf("\nDecryptisover!
\n");
fclose(in);
fclose(out);
sleep
(1);
}
if(ch0=='3')
{
clrscr();
printf("\nPleaseinputtheinfile:
");
scanf("%s",infile);/*输入需要解密的文件名*/
if((in=fopen(infile,"r"))==NULL)
{
printf("Cannotopentheinfile!
\n");
printf("Pressanykeytoexit!
\n");
getch();
exit(0);
}
printf("Pleaseinputtheoutfile:
");
scanf("%s",outfile);/*输入解密后文件的文件名*/
if((out=fopen(outfile,"w"))==NULL)
{
printf("Cannotopentheoutfile!
\n");
printf("Pressanykeytoexit!
\n");
fclose(in);
getch();
exit(0);
}
for(i=1;i<=25;i++)/*暴力破解过程,在察看信息正确后,可以按'Q'或者'q'退出*/
{
rewind(in);
rewind(out);
clrscr();
printf("==========================================================\n");
printf("Theoutfileis:
\n");
printf("==========================================================\n");
while(!
feof(in))
{
ch1=encrypt(fgetc(in),26-i);
putch(ch1);
fputc(ch1,out);
}
printf("\n========================================================\n");
printf("Thecurrentkeyis:
%d\n",i);/*显示当前破解所用密码*/
printf("Press'Q'toquitandotherkeytocontinue......\n");
printf("==========================================================\n");
ch1=getch();
if(ch1=='q'||ch1=='Q')/*按'Q'或者'q'时退出*/
{
clrscr();
printf("\nGoodBye!
\n");
fclose(in);
fclose(out);
sleep(3);
exit(0);
}
}
printf("\nForcedecryptisover!
\n");
fclose(in);
fclose(out);
sleep
(1);
}
menu();
ch0=getch();
}
clrscr();
printf("\nGoodBye!
\n");
sleep(3);
}
实验二进程管理实验
1.实验目的与意义
用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。
2.基本原理和方法
进程调度算法:
采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。
每个进程有一个进程控制块(PCB)表示。
进程控制块可以包含如下信息:
进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。
进程的到达时间为进程输入的时间。
每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。
就绪进程获得CPU后都只能运行一个时间片。
用已占用CPU时间加1来表示。
进程的运行时间以时间片为单位进行计算。
如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。
每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。
重复以上过程,直到所要进程都完成为止。
3.主要仪器设备及耗材
实验室提供的计算机设备和基本的网络环境,安装实验中所要使用的应用软件(TurboCforWindows集成实验与学习环境,或者Turboc++3.1forWindows)。
4.实验内容及步骤
(1)选定一种进程调度算法,对该算法实现的思路进行分析;
调度算法的流程图如下:
(2)编程实现所选定的进程调度算法
(3)对所编写的程序进行调试
(4)对程序运行的结果进行截图
(5)对实验结果进行分析
5.部分参考代码
#include"stdio.h"
#include
#include
#definegetpch(type)(type*)malloc(sizeof(type))
#defineNULL0
structpcb{/*定义进程控制块PCB*/
charname[10];
charstate;
intsuper;
intntime;
intrtime;
structpcb*link;
}*ready=NULL,*p;
typedefstructpcbPCB;
sort()/*建立对进程进行优先级排列函数*/
{
PCB*first,*second;
intinsert=0;
if((ready==NULL)||((p->super)>(ready->super)))/*优先级最大者,插入队首*/
{
p->link=ready;
ready=p;
}
else/*进程比较优先级,插入适当的位置中*/
{
first=ready;
second=first->link;
while(second!
=NULL)
{
if((p->super)>(second->super))/*若插入进程比当前进程优先数大,*/
{/*插入到当前进程前面*/
p->link=second;
first->link=p;
second=NULL;
insert=1;
}
else/*插入进程优先数最低,则插入到队尾*/
{
first=first->link;
second=second->link;
}
}
if(insert==0)first->link=p;
}
}
input()/*建立进程控制块函数*/
{
inti,num;
clrscr();/*清屏*/
printf("\n请输入进程号?
");
scanf("%d",&num);
for(i=0;i { printf("\n进程号No.%d: \n",i); p=getpch(PCB); printf("\n输入进程名: "); scanf("%s",p->name); printf("\n输入进程优先数: "); scanf("%d",&p->super); printf("\n输入进程运行时间: "); scanf("%d",&p->ntime); printf("\n"); p->rtime=0;p->state='w'; p->link=NULL; sort();/*调用sort函数*/ } } intspace() { intl=0;PCB*pr=ready; while(pr! =NULL) { l++; pr=pr->link; } return(l); } disp(PCB*pr)/*建立进程显示函数,用于显示当前进程*/ { printf("\nqname\tstate\tsuper\tndtime\truntime\n"); printf("|%s\t",pr->name); printf("|%c\t",pr->state); printf("|%d\t",pr->super); printf("|%d\t",pr->ntime); printf("|%d\t",pr->rtime); printf("\n"); } check()/*建立进程查看函数*/ { PCB*pr; printf("\n****当前正在运行的进程是: %s",p->name);/*显示当前运行进程*/ disp(p); pr=ready; printf("\n****当前就绪队列状态为: \n");/*显示就绪队列状态*/ while(pr! =NULL) {disp(pr); pr=pr->link;} } destroy()/*建立进程撤消函数(进程运行结束,撤消进程)*/ { printf("\n进程[%s]已完成.\n",p->name); free(p); } running()/*建立进程就绪函数(进程运行时间到,置就绪状态*/ { (p->rtime)++; if(p->rtime==p->ntime) destroy();/*调用destroy函数*/ else { (p->super)--; p->state='w'; sort();/*调用sort函数*/ } } main()/*主函数*/ { intlen,h=0; charch; input(); len=space(); while((len! =0)&&(ready! =NULL)) { ch=getchar(); h++; printf("\nTheexecutenumber: %d\n",h); p=ready; ready=p->link; p->link=NULL; p->state='R'; check(); running(); printf("\n按任一键继续......"); ch=getchar(); } printf("\n\n进程已经完成.\n"); ch=getchar(); } 执笔: 江长斌 审阅: 日期: 2006.12 审定: 日期: 2006.12
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MIS系统软件 MIS 系统软件 实验 指导书