C语言做的,呵呵,不知道有没用,发出去了 
#include "stdafx.h" 
#include<stdio.h> 
#include<iostream.h> 
#include<string.h> 
#include<iomanip.h> 
const int MAXJOB=100;//定义表最大记录数 
typedef struct node 
{ 
int front; 
int length; 
char data[20]; 
}job; 
job frees[MAXJOB];//定义空闲区表 
int free_quantity; 
job occupys[MAXJOB];//定义已分配区表 
int occupy_quantity; 
//初始化函数 
void initial() 
{ 
int i; 
for(i=0;i<MAXJOB;i++) 
{ 
frees[i].front=-1; 
frees[i].length=0; 
strcpy(frees[i].data,"free"); 
occupys[i].front=-1; 
occupys[i].length=0; 
strcpy(occupys[i].data," "); 
} 
free_quantity=0; 
occupy_quantity=0; 
} 
//创建空闲分区表 
int creatfree() 
{ 
FILE *fp; 
char fname[20]; 
cout<<"请输入空闲区数据文件来源的文件名:"; 
cin>>fname; 
if((fp=fopen(fname,"r"))==NULL){ 
cout<<"错误,文件打不开,请检查文件名"<<endl; 
} 
else{ 
while(!feof(fp)) 
{ 
fscanf(fp,"%d\t%d\n",&frees[free_quantity].front,&frees[free_quantity].length); 
free_quantity++; 
} 
cout<<"空闲的分区表已建立!\n"; 
return 1; 
} 
return 0; 
} 
.............没有结束呢 
更多的内容请查看 
希望有所帮助 
更多参考
② (操作系统) 编写代码对存储管理部件的工作过程进行模拟
采用分页存储器允许把一个作业存放到若干不相邻的分区中,既可免去移动信息的工作,又可尽量减少主存的碎片。分页式存储管理的基本原理如下:
1、 页框:物理地址分成大小相等的许多区,每个区称为一块;
2、址分成大小相等的区,区的大小与块的大小相等,每个称一个页面。
3、 逻辑地址形式:与此对应,分页存储器的逻辑地址由两部分组成,页号和单元号。逻辑地址格式为 页号 单元号(页内地址) 采用分页式存储管理时,逻辑地址是连续的。所以,用户在编制程序时仍只须使用顺序的地址,而不必考虑如何去分页。 
4、页表和地址转换:如何保证程序正确执行呢?
采用的办法是动态重定位技术,让程序的指令执行时作地址变换,由于程序段以页为单位,所以,我们给每个页设立一个重定位寄存器,这些重定位寄存器的集合便称页表。页表是操作系统为每个用户作业建立的,用来记录程序页面和主存对应页框的对照表,页表中的每一栏指明了程序中的一个页面和分得的页框的对应关系。绝对地址=块号*块长+单元号 以上从拓扑结构角度分析了对称式与非对称式虚拟存储方案的异同,实际从虚拟化存储的实现原理来讲也有两种方式;即数据块虚拟与虚拟文件系统. 数据块虚拟存储方案着重解决数据传输过程中的冲突和延时问题.在多交换机组成的大型Fabric结构的SAN中,由于多台主机通过多个交换机端口访问存储设备,延时和数据块冲突问题非常严重.数据块虚拟存储方案利用虚拟的多端口并行技术,为多台客户机提供了极高的带宽,最大限度上减少了延时与冲突的发生,在实际应用中,数据块虚拟存储方案以对称式拓扑结构为表现形式. 虚拟文件系统存储方案着重解决大规模网络中文件共享的安全机制问题.通过对不同的站点指定不同的访问权限,保证网络文件的安全.在实际应用中,虚拟文件系统存储方案以非对称式拓扑结构为表现形式. 虚拟存储技术,实际上是虚拟存储技术的一个方面,特指以CPU时间和外存空间换取昂贵内存空间的操作系统中的资源转换技术 基本思想:程序,数据,堆栈的大小可以超过内存的大小,操作系统把程序当前使用的部分保留在内存,而把其他部分保存在磁盘上,并在需要时在内存和磁盘之间动态交换,虚拟存储器支持多道程序设计技术 目的:提高内存利用率 管理方式
A 请求式分页存储管理 在进程开始运行之前,不是装入全部页面,而是装入一个或零个页面,之后根据进程运行的需要,动态装入其他页面;当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面
B 请求式分段存储管理 为了能实现虚拟存储,段式逻辑地址空间中的程序段在运行时并不全部装入内存,而是如同请求式分页存储管理,首先调入一个或若干个程序段运行,在运行过程中调用到哪段时,就根据该段长度在内存分配一个连续的分区给它使用.若内存中没有足够大的空闲分区,则考虑进行段的紧凑或将某段或某些段淘汰出去,这种存储管理技术称为请求式分段存储管理
你好,希望采纳!
③ 求代码~操作系统 进程管理实验 语言C++ 要求如下:
四、实验思路和设计
1、进程管理
(1)程序流程图
由学生自行完成。
(2)主要程序代码
//PCB结构体
struct pcb{
           int id;     //进程序号
           int ra;     //所需资源A的数量
           int rb;     //所需资源B的数量
           int rc;     //所需资源C的数量
           int ntime;  //所需的时间片个数
           int rtime;  //已经运行的时间片个数
           char state; //进程状态
           struct pcb *next;
          } *hready=NULL,*hblock=NULL,*p; //hready,hblock分别为指向就绪和阻塞队列
typedef struct pcb PCB;
int m,n,r,a,b,c,h=0,i=1,time1Inteval; //m为要模拟的进程个数,n为初始化进程个数
//r为可随机产生的进程数(r=m-n)
//a,b,c分别为A,B,C三类资源的总量
//i为进城计数,i=1…n
//h为运行的时间片次数,time1Inteval为时间片大小(毫秒)
//建立一个PCB结构体型的空链表
PCB *increat(void)
{ PCB *head;
  head=NULL;
  return(head);
}
//从链表起始地址开始输出该链表的内容
void disp(PCB *head)
{PCB *p1;
 p1=head;
 AnsiString str2;
 if(head!=NULL)      //链表非空
    {
     do
      {
         str2+="     ";
         str2+=IntToStr(p1->id);str2+="           ";
         str2+=(p1->state);str2+="               ";
         str2+=IntToStr(p1->ra);str2+="                 ";
         str2+=IntToStr(p1->rb);str2+="                ";
         str2+=IntToStr(p1->rc);str2+="                ";
         str2+=IntToStr(p1->ntime);str2+="                    ";
         str2+=IntToStr(p1->rtime);str2+="\r\n";
         p1=p1->next;
       }while(p1!=NULL); //不断输出进程的信息,直到链尾!
     } //if
  else
  {  str2+="\t\t该  队  列  中  没  有  进  程!\r\n" ;}
     Form1->Memo1->Lines->Add(str2);
    }
//将进程插入到链尾(包括就绪队列和阻塞队列)
PCB *insert(PCB *head,PCB*pcb)  //带两个指针形参:队列指针和当前进程PCB
{
PCB *pi,*p1;
p1=head;
pi=pcb;
if (head==NULL)
{
head=pi;
pi->next=NULL;
}
else
{
while(p1->next!=NULL)
{p1=p1->next;}
p1->next=pi;
pi->next=NULL;
}
return(head);
}
//对进程进行初始化,建立就绪队阻塞队列。
void input()
{
AnsiString str1;
m=StrToInt (Form1->Edit1->Text);  //读取要模拟的进程总数给m
n=StrToInt (Form1->Edit2->Text);  //读取需初始化进程数给n
a=StrToInt (Form1->Edit3->Text);  //读取A类资源的总数给a
b=StrToInt (Form1->Edit4->Text);  //读取B类资源的总数给b
c=StrToInt (Form1->Edit5->Text);  //读取C类资源的总数给c
time1Inteval=StrToInt(Form1->Edit6->Text);  //读取时间片长度给time1Inteval
Form1->Timer1->Interval=time1Inteval;
r=m-n;  //计算可随机产生的进程数为r
for(i=1;i<=n;i++)      //初始化n个进程信息
{
  p=getpcb(PCB);  // #define getpcb(type) (type*)malloc(sizeof(type))
  p->id=i;
  str1+=" 产生进程ID:";str1+=IntToStr(p->id);str1+="\r\n";
  p->ra=(random(a-3)+3);
  str1+=" 所需A类资源数:";str1+=IntToStr(p->ra);str1+="\r\n";
  p->rb=(random(b));
  str1+=" 所需B类资源数:";str1+=IntToStr(p->ra);str1+="\r\n";
p->rc=(random(c-2)+2);
  str1+=" 所需C类资源数:";str1+=IntToStr(p->ra);str1+="\r\n";
  p->ntime=(random(5)+1);
  str1+=" 所需时间片个数:";str1+=IntToStr(p->ntime);str1+="\r\n";
  p->rtime=0;
  p->next=NULL;
  if (((a-(p->ra))>=0)&&((b-(p->rb))>=0)&&((c-(p->rc))>=0)) //如果资源符合所需要求
  {                                                 //则写入就绪队列队尾
a=a-(p->ra);     //当前所剩A类资源数目
b=b-(p->rb);     //当前所剩B类资源数目
c=c-(p->rc);     //当前所剩C类资源数目
p->state='W';
hready=insert(hready,p);   //将进程插入就绪队列
}//if
else  //如果资源不符合所需要求,则写入阻塞队列队尾
{
p->state='B';
hblock=insert(hblock,p);
} //if
str1+=" 当前进程状态:";
str1+=(p->state);
str1+="\r\n";
str1+="\r\n";
}//for
Form1->Memo1->Lines->Add(str1);
}
//输出就绪队列和阻塞队列的信息
void outputall()
{
AnsiString str1,str2,str3;
str3+="\r\n" ;
str3+="= = = = = = = = = = = = = = = CPU时间片运行了: "  ;
str3+=IntToStr(h);
str3+="  次= = = = = = = = = = = = = = =\r\n";
Form1->Memo1->Lines->Add(str3);
str1+="*********************************当 前 就 绪 队 列 的 信 息"  ;
str1+="*********************************\r\n" ;
str1+="进程ID  进程状态   A资源数   B资源数   C资源数   需要时间片  已运行时间片";
Form1->Memo1->Lines->Add(str1);
disp(hready);
str2+="*********************************当 前 阻 塞 队 列 的 信 息";
str2+="*********************************\r\n" ;
str2+="\r\n";
str2+="进程ID  进程状态   A资源数   B资源数   C资源数   需要时间片  已运行时间片";
Form1->Memo1->Lines->Add(str2);
disp(hblock);
}
//运行就绪队列的头进程,运行一个时间片(FCFS),轮转一个时间片
PCB *running(PCB *head)
{
PCB *p1;
p1=head;
AnsiString str4;
If (p1->next==NULL) head=increat();
else {head=p1->next; }
p1->state='R';        //进程状态由就绪转向运行
(p1->rtime)++;       //已运行时间片数增加1
h++;
str4+="~~~~~~~~~~~~~~~~ 当前正在运行的进程ID是: ";
str4+=IntToStr(p1->id);
str4+=" ~~~~~~~~~~~~~~~~~~\r\n";
str4+="进程ID  进程状态   A资源数   B资源数   C资源数   需要时间片  已运行时间片\r\n";
str4+="     ";
str4+=IntToStr(p1->id);str4+="          ";
str4+=(p1->state);str4+="              ";
str4+=IntToStr(p1->ra);str4+="                 ";
str4+=IntToStr(p1->rb);str4+="                ";
str4+=IntToStr(p1->rc);str4+="                ";
str4+=IntToStr(p1->ntime);str4+="                     ";
str4+=IntToStr(p1->rtime);str4+="                  ";
Form1->Memo1->Lines->Add(str4);
if(p1->ntime==p1->rtime)    //如果已经运行的时间片到达所需次数,该进程结束
{
     str4+="\r\n\r\n\t\tID号为:";
     str4+=IntToStr(p1->id);
     str4+=" 的进程已经完成!!!";
     Form1->Memo1->Lines->Add(str4);
     a=a+(p1->ra);
     b=b+(p1->rb);
     c=c+(p1->rc);
     free(p1);   //释放当前指针
   }
else  //如果已经运行的时间片未到达所需次数,该进程运行一个时间片后进入就绪队列尾
   {
     p1->state='W';
     head=insert(head,p1);
   }
return(head);
}
//检测当前资源数目是否满足阻塞队列里进程的需求
void testblock()
{
PCB *p1,*p2;
p1=hblock;
p2=hblock;
AnsiString str5;
while((hblock!=NULL)&&(p1!=NULL))
{
if((a-(p1->ra)>=0)&&(b-(p1->rb)>=0)&& (c-(p1->rc)>=0)) //如果满足
{if(p1==hblock)
{
hblock=p1->next;
p1->state='W'; 
hready=insert(hready,p1);  //将阻塞的进程插入就绪队列
a=a-(p->ra);
b=b-(p->rb);
c=c-(p->rc);
str5="\tID号为: " ;
str5+=IntToStr(p1->id);
str5+=" 的进程由阻塞队列转入就绪队列!\r\n";
           p1=hblock;
          } //if(p1==hblock)
        else
          {p2->next=p1->next;
           p1->state='W';
           hready=insert(hready,p1);
           str5="\tID号为: " ;
           str5+=IntToStr(p1->id);
           str5+=" 的进程由阻塞队列转入就绪队列!\r\n";
           p1=p2->next;
          }//else
    } //大if
    else
       {p2=p1;
        p1=p1->next;
     } //else
   Form1->Memo1->Lines->Add(str5);
} //whlie
}
//检测是否有新的进程产生,随机产生新进程
void testnew()
{
int t;
AnsiString str6;
if(r>0)  //r=m-n为可随机产生的进程数目
{
t=random(9);       //生成随机数
if(t<=7)           //如果随机数小于等于7,则产生新进程,否则不产生
{
p=getpcb(PCB);
str6+="有新的进程申请加入:\r\n" ;
p->id=i++;  //i为全程变量,表示进程号?
str6+="进程ID:";
str6+=IntToStr(p->id);
str6+="\r\n";
p->ra=(random(a-3));  //随机分配资源
str6+="所需A类资源数:";
str6+=IntToStr(p->ra);
str6+="\r\n";
p->rb=(random(b-3));
str6+="所需B类资源数:";
str6+=IntToStr(p->rb);
str6+="\r\n";
p->rc=(random(c-3));
str6+="所需C类资源数:";
str6+=IntToStr(p->rc);
str6+="\r\n";
p->ntime=(random(5)+1);  //随机分配时间片总数
str6+="所需时间片个数:";
str6+=IntToStr(p->ntime);
str6+="\r\n";
p->rtime=0;             //已运行时间片数初始为0
p->next=NULL;
if (((a-(p->ra))>=0)&&((b-(p->rb))>=0)&&((c-(p->rc))>=0))
{                                     //进程满足要求,进入就绪队列
a=a-(p->ra);  //分配资源给该进程,总资源数减少
b=b-(p->rb);
c=c-(p->rc);
p->state='w';
str6+="当前进程状态:";
str6+=(p->state);
str6+="\r\n";
hready=insert(hready,p);
str6+="资源满足新进程需求,该进程进入就绪队列!";
}//if
else                        //进程不满足要求,进入阻塞队列
{
p->state='B';
hblock=insert(hblock,p);
str6+="当前进程状态:";
str6+=(p->state);
str6+="\r\n";
str6+="资源不能满足新进程需求,该进程进入阻塞队列!" ;
}//else
}//if (t<=7)
Form1->Memo1->Lines->Add(str6); 
}//if(r>0)
r--;
}
//系统三类资源变化情况的显示
void rescore()
{
   if(a>a1) {Form1->Edit7->Text=IntToStr(a1);}
   if(a<0)  {Form1->Edit7->Text=0;}
   if(a>=0&&a<a1) {Form1->Edit7->Text=IntToStr(a);}
   if(b>b1) {Form1->Edit8->Text=IntToStr(b1);}
   if(b<0)  {Form1->Edit8->Text=0;}
   if(b>=0&&b<=b1) {Form1->Edit8->Text=IntToStr(b); }
   if(c>c1) {Form1->Edit9->Text=IntToStr(c1);}
   if(c<0)  {Form1->Edit9->Text=0;}
   if(c>=0&&c<=c1) {Form1->Edit9->Text=IntToStr(c); }
}
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
runFcfs();  //先来先服务(FCFS)调度算法
}
//先来先服务(FCFS)调度算法
void runFcfs()
{ 
AnsiString str;
if(form1_hready!=NULL) //如果就绪队列为非空,则不断运行,直到就绪队列为空为止
{
outputall();  //输出就绪队列和阻塞队列的信息
form1_hready=running(form1_hready);  //将就绪队列的第一个进程运行一个时间片
testblock();  //检查阻塞队列是否有进程可以进入就绪队列
testnew();   //检查是否有新进程产生
rescore() ;   //系统三类资源变化情况的显示
}
else
{
Form1->Timer1->Enabled=false;
Form1->Edit7->Text=IntToStr(a1);
Form1->Edit8->Text=IntToStr(b1);
Form1->Edit9->Text=IntToStr(c1);
str+="\r\n\r\n<<<<<<<<<<<<<<<所 有 的 进 程 都 已 经 成 功 运 行 结 束 !>>>>>>>>>>>>>>";
Form1->Memo1->Lines->Add(str);
}
}
//将结果保存成txt文件
void __fastcall TForm1::N8Click(TObject *Sender)
{
    if(Form1->SaveDialog1->Execute())
    {
     FILE* fp=fopen(Form1->SaveDialog1->FileName.c_str(),"w");
     if(fp==NULL)
      {
       MessageBox(NULL,"打开文件出错","信息",MB_OK);
       return;
       }
     for(int i=0;i<Form1->Memo1->Lines->Count;i++)
      {  fputs(Form1->Memo1->Lines->Strings[i].c_str(),fp);
         fputc('\n',fp);
       }
     fclose(fp);
}
}
//开始模拟按钮单击执行函数
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  runmain();
  Form1->Button1->Enabled=false;
  Form1->Edit1->Enabled=false;
  Form1->Edit2->Enabled=false;
  Form1->Edit3->Enabled=false;
  Form1->Edit4->Enabled=false;
  Form1->Edit5->Enabled=false;
  Form1->Edit6->Enabled=false;
}
//清除屏幕按钮单击执行函数
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  Form1->Memo1->Clear();
  Button1->Enabled=true;
  h=0;
  Form1->Edit1->Enabled=true;
  Form1->Edit2->Enabled=true;
  Form1->Edit3->Enabled=true;
  Form1->Edit4->Enabled=true;
  Form1->Edit5->Enabled=true;
  Form1->Edit6->Enabled=true;
}
//运行的主函数
void runmain()
{
  AnsiString str,str1;
input();
Form1->Timer1->Enabled=true;  //触发时钟,调用runFCFS。
str+="\r\n";
}
④ c语言程序学生成绩管理系统源代码
VC++6.0编译通过,利用结构体,结构体指针,单链表,文件操作,命令窗口下简单菜单设计,可从文件读入数据,自动保存数据,有错误自动判断修复,能添加,删除,查询,显示,排序记录,通过本人2小时升级修改,已经适合多数初学者期末C语言作业设计要求!如果要增加科目,只要修改源代码中的Class_N的值就可以了,科目的名称在程序第一次运行时输入,会自动保存到student.ini文件,程序运行时自动生成的student.ini文件为系统信息文件(二进制文件),student.db为数据存储文件(二进制文件),Student.txt为操作记录文件(文本文件),可以修改Student.txt的打开方式,那样就能保存以前的操作记录了。代码下载:请点击下载链接:网页链接
⑤ 商品库存管理系统的c语言源代码
#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 
struct BOOK 
{ 
int id,usr[10],total,store,days[10]; 
char name[31],author[21]; 
}books[100]; 
/*上面是结构体的定义,用于存放书籍及借书的信息。*/ 
void page_title(char *menu_item) 
{ 
clrscr(); 
printf(">>> 图 书 管 理 系 统 <<<\n\n- %s -\n\n",menu_item); 
} 
/*上面是打印页眉的函数,同时通过参数menu_item,可以显示当前的状态。*/ 
void return_confirm(void) 
{ 
printf("\n按任意键返回……\n"); 
getch(); 
} 
/*上面是返回前请求确认的函数,以便在返回前观察结果*/ 
int search_book(void) 
{ 
int n,i; 
printf("请输入图书序号:"); 
scanf("%d",&i); 
for(n=0;n<100;n++) 
{ 
if(books[n].id==i) 
{ 
printf("书名:%s\n",books[n].name); 
printf("作者:%s\n",books[n].author); 
printf("存数:%d of ",books[n].store); 
printf("%d\n",books[n].total); 
return n; 
} 
} 
printf("\n输入错误或无效图书序号.\n"); 
return -1; 
} 
/*上面的函数是在数组中找到图书号匹配的记录,显示其信息并返 
回数组下标,如果找不到相应记录则提示错误并返回-1。*/ 
void book_out(void) 
{ 
int n,s,l,d; 
page_title("借阅图书"); 
if((n=search_book())!=-1&&books[n].store>0) 
{ 
printf("请输入借书证序号:"); 
scanf("%d",&s); 
printf("请输入可借天数:"); 
scanf("%d",&d); 
for(l=0;l<10;l++) 
{ 
if(books[n].usr[l]==0) 
{ 
books[n].usr[l]=s; 
books[n].days[l]=d; 
break; 
} 
} 
books[n].store--; 
} 
if(n!=-1&&books[n].store==0) printf("此书已经全部借出.\n"); 
return_confirm(); 
} 
/*上面是借书的函数,首先调用找书函数*/ 
void book_in(void) 
{ 
int n,s,l; 
page_title("归还图书"); 
if((n=search_book())!=-1&&books[n].store<books[n].total) 
{ 
printf("借阅者图书证列表:\n"); 
for(l=0;l<10;l++) 
if (books[n].usr[l]!=0) 
printf("[%d] - %d天\n",books[n].usr[l],books[n].days[l]); 
printf("请输入借书证序号:"); 
scanf("%d",&s); 
for(l=0;l<10;l++) 
{ 
if(books[n].usr[l]==s) 
{ 
books[n].usr[l]=0; 
books[n].days[l]=0; 
break; 
} 
} 
books[n].store++; 
} 
if(n!=-1&&books[n].store==books[n].total) 
printf("全部入藏.\n"); 
return_confirm(); 
} 
void book_add(void) 
{ 
int n; 
page_title("注册新书"); 
for(n=0;n<100;n++) 
if(books[n].id==0) break; 
printf("序号:"); 
scanf("%d",&books[n].id);