优化前三步

/////////////////////////////////子函数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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值