/////////////////////////////////子函数1 创建进程函数
#include <stdio.h> //标准输入输出函数
#include <stdlib.h> //标准库函数
#include <string> //字符串处理函数
#include <ctype.h> //字符操作函数
#include <conio.h> //控制台输入输出函数,虽然不是标准头文件,但是大部分编译器都支持
#include <iostream>
using namespace std;
//________ //定义进程数量
/**
*在文件开头声明函数原型,将函数定义放在main()函数后面
*这是一个优雅的编程习惯
**/
int yanzheng(void); //验证
void Menu(void); //主界面
int Create(int); //创建进程
int View(int); //查看进程
int Swap(int,int); //换出进程
int swapdg();//swap递归函数
struct PCB //定义进程结构(PCB)
{
int ID; //进程ID
int jj; //进程优先级
int dx; //进程大小
string jx; //进程信息
bool hs; //活动标识
}; //结构体寄存器,用于中转其内在数据
struct PCB A[5],t;
int A_ID[5];//进程ID寄存器
int main()
{
if(yanzheng()==0)
{
return 0; // 主函数返回0 结束主函数;
}
//用于验证密码
////////////////////////////////////////////////////////////
char key;
//用于判断用户对于子界面的选择
int i,a,s=0;
//a用于判断用户输入的选择,s用于累加进程数量 进程总数 ,i用于作为循环变量
//________; //要进行的操作
//显示程序菜单,执行各种操作
while(1)
{
system("cls");
//清屏
Menu();
//显示主菜单
printf("请选择一个项目\n");
scanf("%d",&a);
//输入要执行的操作
//刷新(清空)stdin缓冲区
system("cls");
//清屏
switch(a)
{
case 1:
printf(" 1.创建新进程\n");
for(i=0;i<5;i++)
{
Create(i);
s++;
cout<<"是否继续创建进程,Y键确认"<<endl;
cin>>key;
if(key!='Y')
{
i=5;
}
}
printf("按任意键返回主菜单\n");
getch();
break;
case 2:
printf(" 2.查看某进程\n");
if(s!=0)
{
View(s);
}
else
{
cout<<"还未创建进程"<<endl;
}
printf("按任意键返回主菜单\n");
getch();
break;
case 3: //换出进程
printf(" 3.换出某进程\n");
cout<<"当前进程id号如下"<<endl;
for(i=0;i<s;i++)
{
printf("第%d个进程的ID为%d\t",i+1,A[i].ID);
}
Swap(0,s);
printf("按任意键返回主菜单\n");
getch();
break;
case 4: //撤销进程
/*
while(1)
{
________ //调用撤销进程函数
if(________) //继续撤销进程
________ //清屏
else //返回主菜单
________
}
*/
printf("4.撤销某进程\n");
printf("按任意键返回主菜单\n");
getch();
break;
//Redo();
case 5: //进程通信
/*
while(1)
{
________ //调用进程通信函数
if(________) //继续进程通信
________ //清屏
else //返回主菜单
________
}
*/
printf("5.进程间通信\n");
printf("按任意键返回主菜单\n");
getch();
break;
case 6: //退出系统
return 0;
//正常退出
default:
printf("没有相应的菜单,请从新选择...\n");
printf("按任意键返回主菜单\n");
}
//return 0;
}
return 0;
}
///////////////////////////////////////////////////////////////
int Create(int c)//c为进程下标
{
int j=0,i=0;
system("cls");
printf("请输入第%d创建进程的ID\n",c+1);
scanf("%d",&A[c].ID);
printf("请输入第%d进程的优先级(JJ)\n",c+1);
scanf("%d",&A[c].jj);
printf("请输入第%d进程的大小(DX)\n",c+1);
scanf("%d",&A[c].dx);
////////////////////////////////////////////////////////
printf("请输入第%d进程的信息(jx)\n",c+1);
cin>>A[c].jx;
////////////////////////////////////////////////////////
A[c].hs=true;
for(i=0;i<c;i++)
{
if(A[c].ID==A[c--].ID)
{cout<<"进程ID与之前进程冲突,请重新输入该进程ID"<<endl;
printf("请输入第%d创建进程的ID\n",c+1);
scanf("%d",&A[c].ID);
}
}
A_ID[c]=A[c].ID; //为进程ID寄存器赋值
system("cls");
return 0;
}
////////////////////////////////////////////////////////////////////////
void Menu()
{
printf("***********************************************\n");
printf("* 进程演示系统 *\n");
printf("* 信管一班 201552070118 王同学 *\n");
printf("***********************************************\n");
printf(" 1.创建新进程 2.查看某进程 \n");
printf(" 3.换出某进程 4.撤销某进程 \n");
printf(" 5.进程间通信 6.退出系统 \n");
printf("***********************************************\n");
printf("请选择(1~6):");
}
////////////////////////////////////////////////////////////////////
int yanzheng() ////////////////////验证码函数
{
int a,i,j=3;
for(i=0;i<3;i++)
{
printf("请输入验证密码(6位)");
scanf("%d",&a);
if(a==123456) //验证密码是否正确
{
i=3; //如果密码正确 ,改变循环变量,结束循环
}
else
{
j--; //j--提示用户输入密码错误次数
printf("你输错了,还有%d次机会\n",j);
if(j==0)
{
return 0; //j==0 结束程序
}
}
}
}
///////////////////////////////////////////////////////////
int View(int a) //查看进程
{
int i;
printf("***********************************************\n");
printf("共创建了%d个进程\n",a);
for(i=0;i<a;i++)
{
printf("第%d个进程的ID为%d\n",i+1,A[i].ID);
printf("第%d个进程的优先级为%d\n",i+1,A[i].jj);
printf("第%d个进程的大小为%d\n",i+1,A[i].dx);
printf("第%d个进程的信息为",i+1);
cout<<A[i].jx<<endl;
printf("第%d个进程标示为",i+1);
if(A[i].hs==true)
{
cout<<"TRUE"<<endl;
}
printf("***********************************************\n");
}
printf("***********************************************\n");
return 0;
}
////////////////////////////////////////////////////////
int Swap(int swap_c,int swap_s) //换出进程 swap_c用于记录进程ID寄存器,swap_s用于记录当前创建进程总数
{
int swap_A,swap_B,i,j;
//swap_A,swap_B为交换的两个进程变量,变量内所载入的为所交换进程的ID号,由用户输入。i为循环变量
char swap_n;
//swap_n为用户判断是否要交换操作。
cout<<"如果不需要调换进程按N返回上一层"<<endl;
cin>>swap_n;
if(swap_n=='N')
{
getch();
return 0;
}
//用户输入swap_n 判断确认操作
if(swap_s<2)
{
cout<<"当前进程数小于2"<<endl<<"按任意键返回"<<endl;
getch();
return 0;
}
//swap_s为当前创建进程总数,如果总数小于2 那么结束 交换操作
else
{
//当通过前边验证时,正式进入交换阶段
//用户输入swap_A 与 swap_B
for(i=0;i<swap_s;i++)
{
cout<<"请输入需要交换的A进程的ID号"<<endl;
cin>>swap_A;
cout<<"请输入需要交换的B进程的ID号"<<endl;
cin>>swap_B;
if(swap_A==A_ID[i])
//swap_A与A_ID[i] 进程ID寄存器, 作比较找到用户输入的ID在 当前系统中存在
{
for(j=0;j<swap_s;j++)
if(swap_B==A_ID[j])
{
t=A[swap_A];
A[swap_A]=A[swap_B];
A[swap_B]=t;
return 0;
}
else if(j+1==swap_s)
{
cout<<"swap_B输入有误"<<endl;
getch();
break;
}
break;
//如果swap_A==A_ID[i]不满足,但满足i+1==swap_s,也就是说当i达到判定范围的最后一次操作时 输出用户输入的swap_A有误,为i初始化
}
else if(i+1==swap_s)
{
cout<<"swap_A输入有误"<<endl;
getch();
break;
}
}
}
return 0;
}
优化前三步
最新推荐文章于 2024-05-27 15:51:17 发布