注册 登录
编程论坛 C++ Builder

新手请教图像界面问题

jklr11 发布于 2008-12-06 12:21, 1066 次点击
近期编了一个c程序,想弄成图形界面来显示,不知道怎样能从图形界面输入参数,然后又从那里输出,不知道怎么修改,不会要重写一遍吧,用c++语言。我的程序如下:
4 回复
#2
jklr112008-12-06 12:21
#include"stdio.h"
#include<stdlib.h>
#include<conio.h>
#define getpch(type)(type*)malloc(sizeof(type))
#define NULL 0
#define contain 160

struct jcb{
char name[10];
int length;
int fir;
int tail;
struct jcb *pre;
struct jcb *next;
}*head,*now,*spare;
typedef struct jcb JCB;


del()
{char name[10];JCB *p;
 printf("输入你要删除的进程名:");
 scanf("%s",name);
 p=head;
 if(strcmp(head->name,name)==0){strcpy(p->name,"space");if(strcmp(p->next->name,"space")==0){p->length=p->length+p->next->length;p->tail=p->next->tail;p->next=p->next->next;}}
 else {
 do{p=p->next;}while(strcmp(p->name,name)!=0&&p!=head);
 if(p==head)printf("没有找到你需要删除的文件,请检查是否输入错误!!");
 else {
 strcpy(p->name,"space");
 if(strcmp(p->next->name,"space")==0){p->length=p->length+p->next->length;p->tail=p->next->tail;p->next=p->next->next;}
 if(strcmp(p->pre->name,"space")==0){p->pre->length=p->pre->length+p->length;p->pre->tail=p->tail;p->pre->next=p->next;}
 }}
 getchar();
}

restore()
{JCB *p,*q;int i=0;
 q=getpch(JCB);q->pre=NULL;
 p=head;
 do
 {if(strcmp(p->name,"space")==0)
  i=i+p->length;
  p->next->fir=p->next->fir-i;
  p->next->tail=p->next->tail-i;
  p=p->next;
 }while(p->next!=head);if(strcmp(p->name,"space")==0)i=i+p->length;
 if(strcmp(head->name,"space")==0)head=head->next;p=head;
  do
 {if(strcmp(p->name,"space")!=0)
  {p->pre=q;q->next=p;q=p;}
   p=p->next;
 }while(p!=head);
 strcpy(spare->name,"space");
 spare->length=i;
 spare->fir=q->tail+1;
 spare->tail=q->tail+i;
 spare->pre=q;
 spare->next=p;
 head->pre=spare;
}

newj()
{JCB *p;char a;
 printf("\n 请输入作业名:(注意:不能用'space'做作业名!)");
 now=getpch(JCB);
 scanf("%s",now->name);
 printf("\n 请输入作业大小:");
 scanf("%d",&now->length);
 if(now->length>contain)printf("\n 内存空间不足,分配失败!!");
 else{
 if(spare->fir==1){now->fir=1;now->tail=now->length;now->pre=spare;now->next=spare;head=now;spare->pre=head;spare->next=head;spare->fir=head->length+1;spare->length=contain-head->length;}
 else
 {p=head;
  while((strcmp(p->next->name,"space")!=0||p->next->length<now->length)&&p->next!=head)p=p->next;
  if(p->next==head)
  {printf("\n 内存空间不足,分配失败!!是否整理内存?(Y/N)");a=getchar();a=getchar();
   if(a=='Y'||a=='y'){restore();printf("\n 内存整理完成!请尝试回主界面重新输入作业!");}
   else printf("不整理内存!作业将无法分配,分配失败!");
  }
  else{
  now->fir=p->tail+1;
  now->tail=p->tail+now->length;
  now->pre=p;
  if(p->next->length>now->length){
  p->next->fir=now->tail+1;
  p->next->length=p->next->length-now->length;
  now->next=p->next;
  }
  else now->next=p->next->next;
  p->next=now;
  }
 }}getchar();
}

disp()
{JCB *p;int i,j;
 p=head;
 clrscr();
 printf("内存空间分配情况为:\n");
 do{
 i=p->length;
 if(strcmp(p->name,"space")!=0)for(j=0;j<i;j++)printf("■");
 else for(j=0;j<i;j++)printf("□");
 p=p->next;}while(p!=head);
 printf("\n各作业以及可用空间详细信息:\n");
 printf("作业名\t\t使用空间\t头地址\t\t尾地址");
 do{
 printf("\n%s\t\t%d\t\t%d\t\t%d",p->name,p->length,p->fir,p->tail);
 p=p->next;}while(p!=head);
 getchar();
}



 void main()
 {char c='0';
  spare=getpch(JCB);
  strcpy(spare->name,"space");
  spare->length=contain;
  spare->fir=1;
  spare->tail=contain;
  while(c!='5'){clrscr();
  printf("           ************      欢迎使用内存分配程序        ************       \n\n");
  printf("           **********************************************************       \n");
  printf("          *                                                          *      \n");
  printf("         *    1.新建一个作业                                          *     \n\n");
  printf("              2.删除一个作业                                                \n\n");
  printf("              3.显示当前作业分配情况                                        \n\n");
  printf("              4.整理当前内存                                                \n\n");
  printf("         *    5.退出程序                                              *     \n");
  printf("          *                                                          *      \n");
  printf("           **********************************************************       \n");
  printf(" 请选择你要做的操作:");
  c=getchar();
  switch(c){
  case '1':newj();break;
  case '2':del();break;
  case '3':disp();break;
  case '4':restore();break;
  case '5':break;
  default :printf("\n输入错误!请重新输入!");
   }getchar();
  }
 }
#3
jklr112008-12-06 12:22
对了,那个dos界面是因为要调试程序而设计,不用管
#4
jklr112008-12-08 20:44
怎么每人来帮帮我的……我不会用borland c++啊!
#5
ahuangtianyu2008-12-15 11:08
1