第一篇:C语言课程设计代码
#include “stdio.h” #include
void main(){ int n=0;struct course *head=NULL;void insert(struct course **head,struct course *cou);void Print(struct course **head,int *n);void Modify(struct course **head,int *n);void Require(struct course **head);void Creat(struct course **head,int *n);void Delete(struct course **head,int *n);void Fun(struct course **head,int *n);
Fun(&head,&n);}
void insert(struct course **head,struct course *cou){ struct course *p0,*p1,*p2;p2=p1=*head;p0=cou;if(*head){
while((p0->semester>p1->semester)&&(p1->next))
{
p2=p1;
p1=p1->next;
}
if(p0->semester
semester)
{
if(*head==p1)*head=p0;
else p2->next=p0;
p0->next=p1;}
else
{
if(p0->semester==p1->semester){ while((p0->cID>p1->cID)&&(p1->next)&&(p0->semester==p1->semester))
{
} if(p0->semester!=p1->semester){
} else {
if(p0->cID<=p1->cID){
if(*head==p1)*head=p0;else p2->next=p0;p2=p1;p1=p1->next;p2->next=p0;p0->next=p1;
p0->next=p1;
}
else
{p1->next=p0;p0->next=NULL;}
}
}
else
{p1->next=p0;p0->next=NULL;}
} } else
{
*head=p0;
p0->next=NULL;} }
void Print(struct course **head,int *n){ struct course *p;p=*head;if(*head){
if(*n==1)printf(“nThis %d record is:n”,*n);
else printf(“nThese %d records are:n”,*n);
printf(“semester cID
name
creditn”);
do
{ printf(“%-10d%-10d%-18s%-12.1f n”,p->semester,p->cID,p->name,p->credit);
p=p->next;
}while(p!=NULL);} else printf(“nList null!n”);}
void Modify(struct course **head,int *n){ struct course *p,*p2;int cID;if(*head){
Print(head,n);while(1){ printf(“nPlease input the cID which you want to modify:”);
scanf(“%d”,&cID);p2=p=*head;while(p->next&&(cID!=p->cID)){
p2=p;
p=p->next;} if(cID==p->cID){
printf(“Please input the new cID(1~60):”);
scanf(“%d”,&p->cID);
while(p->cID<0||p->cID>60)
{
printf(“nError!”);
printf(“nPlease input the new cID(1~60):”);
scanf(“%d”,&p->cID);
}
printf(“Please input the new semester(1~8):”);
scanf(“%d”,&p->semester);while(p->semester<0||p->semester>8)
{
printf(“nError!”);
printf(“nPlease input the new semester(1~8):”);
scanf(“%d”,&p->semester);
}
printf(“Please input the new credit:”);
scanf(“%f”,&p->credit);
printf(“Please input the new name:”);
scanf(“%s”,p->name);
if(p==*head)*head=p->next;
else p2->next=p->next;
insert(head,p);
break;
}
else printf(“%d not been found!n”,cID);
} } else {printf(“nList null!n”);} }
void Require(struct course **head){ struct course *p;float sum=0;int sem,i=0;printf(“nPlease input the semester which is required:”);
scanf(“%d”,&sem);p=*head;while(p){
if(sem==p->semester)
{
i++;if(i==1)printf(“nsemester cID
name
creditn”);printf(“%-10d%-10d%-18s%-12.1f n”,p->semester,p->cID,p->name,p->credit);
sum=sum+p->credit;
}
p=p->next;} printf(“The sum of credit in this term is:%.1fn”,sum);}
void Creat(struct course **head,int *n){ struct course *p1;while(1){
p1=(struct course *)malloc(LEN);
printf(“Please input the cID(1~60):”);
scanf(“%d”,&p1->cID);
while(p1->cID<0||p1->cID>60)
{
printf(“nError!”);
printf(“nPlease input the cID(1~60):”);
scanf(“%d”,&p1->cID);
}
if(p1->cID==0)break;
printf(“Please input the semester(1~8):”);
scanf(“%d”,&p1->semester);
while(p1->semester<0||p1->semester>8)
{
printf(“nError!”);
printf(“nPlease input the semester(1~8):”);scanf(“%d”,&p1->semester);
}
} } printf(“Please input the credit:”);scanf(“%f”,&p1->credit);printf(“Please input the name:”);scanf(“%s”,p1->name);insert(head,p1);*n=*n+1;printf(“nYou can continue until the cID is ”0“!n”);Print(head,n);void Delete(struct course **head,int *n){
struct course *p1,*p2;int cID;Print(head,n);if(*head){ printf(“Please input the cID of the course which you want to delete:”);scanf(“%d”,&cID);p1=*head;
while(cID!=p1->cID&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(cID==p1->cID)
{
if(p1==*head)*head=p1->next;
else p2->next=p1->next;
printf(“Have delete cID:%dn”,cID);
*n=*n-1;
}
else printf(“%d not been found!n”,cID);} }
void Fun(struct course **head,int *n){ char num;
while(1)
{
system(“cls”);
puts(“**************** Main Menu ******************”);
puts(“* 1.Add Records
2.Print Records
*”);
puts(“* 3.Delete Records
4.Modify Records *”);
puts(“* 5.Require Records 6.Exit
*”);
printf(“Please input your choice: ”);
scanf(“%d”,&num);
switch(num)
{
case 1:Creat(head,n);break;
case 2:Print(head,n);break;
case 3:Delete(head,n);break;
case 4:Modify(head,n);break;
case 5:Require(head);break;case 6:exit(0);break;
default: break;
}
printf(“nPress ”Enter“ to continue!”);getchar();getchar();
} }
第二篇:王爽语言课程设计一代码
assume cs:code data segment;0-83H db '1975','1976','1977','1978','1979','1980','1981','1982','1983' db '1984','1985','1986','1987','1988','1989','1990','1991' ,'1992' db '1993','1994','1995'
;84H-0a7h dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
dd 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 dd 11542,14430,15257,17800 data ends
b segment db 32 dup(0)b ends
stack segment dw 32 dup(0)stack ends
code segment start:
mov ax,data
;init ds,ss
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,32
;bx--第几组 si--年份,人数,雇员
di--显示位置
mov bx,0
mov si,0
mov di,0
mov cx,21 lp:
push cx
;-------------------------
;年份
mov cx,4;内循环次数
mov si,bx
call show_str
;-------------------------
;-------------------------
;收入
mov si,bx
add si,84
;si指向下一个段
call dtoc
push ax
;
push ds
push si
push di
mov ax,b
mov ds,ax
mov si,0
add di,40
call show_str
pop di
pop si
pop ds
pop ax
;-------------------------
;-------------------------
;收入
mov si,bx
add si,84
add si,84
;pointer to employee 当employee定义为dd时,才能如此寻址,dw时,寻址不正确
call dtoc2
push ax
;pointer to data src
push dx
push si
push di
mov ax,b
mov ds,ax
mov si,0
add di,80
call show_str
pop di
pop si
pop ds
pop ax
jmp mcon
;-------------------------
help:
jmp lp
;-------------------------
;平均
mcon:
mov ax,data
mov ds,ax
mov si,bx
;初始化 num1
add si,84
mov ax,ds:[si]
add si,2
mov dx,ds:[si]
mov si,bx
;初始化 num2
add si,84
add si,84
;当employee定义为dd时,才能如此寻址,dw时,寻址不正确
mov cx,ds:[si]
call divdw
push ds
;存放结果
push si
push di
push cx
push ax
mov ax,b
mov ds,ax
mov si,0
pop ax
mov ds:[si],ax
add si,2
;inc si ?
mov ds:[si],dx
mov si,0
call dtoc
add di,120
;显示结果
call show_str
pop cx
pop di
pop si
pop ds
;-------------------------
add di,160
;inc bx
add bx,4
pop cx
loop help
mov ax,4c00H
int 21H
;主函数结束
;---------------;-dtoc2
-;-params ds,si--src num(num1 16 bit)
-;-return B Segment save num cx--num Length
-;---------------dtoc2:
push ds
push si
push ax
push bx
dc2:
mov bx,0
;save length
mov ax,ds:[si]
;初始化 num1
mov dx,0 dccon2:
mov cx,10
;初始化 num2
call divdw
add cx,30H
push cx
;save extra
inc bx
push ax
or ax,dx
mov cx,ax
pop ax
jcxz dcok2
jmp dccon2
dcok2:
mov cx,bx
mov ax,b
mov ds,ax
mov si,0 dcsav2:
pop ds:[si]
inc si
loop dcsav2
mov cx,bx
;result cx--length
pop bx
pop ax
pop si
pop ds
ret
;---------------;-dtoc
-;-params ds,si--src num(num1 32 bit)
;-params cx--length of str ds,si--src di--destination pos
-;---------------show_str: push es
push ax
push si
push di
push bx
push cx
mov ax,0b800H;显存地址
mov es,ax
mov bl,7
;颜色
sstr:
mov al,ds:[si]
mov es:[di],al
inc di
mov es:[di],bl
inc di
inc si
loop sstr
pop cx
pop bx
pop di
pop si
pop ax
pop es
ret
;---------------;-除法函数
;-余数--cx
-;---------------divdw: push bx
ddw:
push ax
mov ax,dx
mov dx,0
div cx;商在ax中、余数在dx中
mov bx,ax
pop ax
div cx
mov cx,dx
mov dx,bx
pop bx
ret
code ends end start
第三篇:C语言课程设计《高速公路联网收费系统》代码
作者:吴侠志
就读院校:东莞理工学院
#include “stdafx.h” #define NUM 4 #define max_len 8 #include
char *mytime(struct tm *timeptr);
//获取系统时间的函数 void Delay(int n);//延时函数 char *filename(int startkey);void initialize(struct car *cars,int num,FILE *fp);///初始化函数 int refer(struct car *cars,int startkey);//查询
int km[10]={0,0,82,162,288,368,391,514,800,867};
/* 记录各站与首站的里程,单位:km */ double price[6]={0.0,0.6,1.2,1.8,2.4,3.0};
/* 记录各类车的里程价位,单位:元/辆公里 */ char *address[10]={“0”,“湛江”,“茂名”,“阳江”,“开平”,“佛山”,“广州”,“深圳”,“汕头”,“汾水”};char *kind[6]={“特殊车”,“一类车”,“二类车”,“三类车”,“四类车”,“五类车”};
struct car { int card_num;
/* 卡号 */ int car_type;int station_in;char time_in[26];int station_out;char time_out[26];char is_in;double money;int flag;}cars[9*NUM+1];
int num=0;int pass=0;int main(int argc, char* argv[]){ int i,key,choice,j,k,m,size;double pay,money;char enter,pwd[max_len+1],password[max_len+1],ch;FILE *fp;fp=fopen(“标记.txt”,“a+”);fclose(fp);
fp=fopen(“记录.txt”,“a+”);
fclose(fp);
printf(“t欢迎登录广东同三高速公路联网收费系统n”);printf(“┏━━━━━━━━━━━━━━━━━━━━┓n”);printf(“┃
1.湛江
2.茂名
3.阳江
┃n”);printf(“┃
4.开平
5.佛山
6.广州
┃n”);printf(“┃
7.深圳
8.汕头
9.汾水关
┃n”);printf(“┗━━━━━━━━━━━━━━━━━━━━┛n”);printf(“请选择所在站点,并输入该序号:”);int startkey;while(1){
fflush(stdin);
while(scanf(“%d%c”,&startkey,&enter)==0 || enter!='n')
{
printf(“terror!!input again:”);
fflush(stdin);
}
if(startkey==1 || startkey==2 || startkey==3 || startkey==4 || startkey==5 || startkey==6 || startkey==7 || startkey==8 || startkey==9)
{
break;
}
else
{
printf(“terror!!input again:”);
continue;
} } printf(“初始化中……”);
fp=fopen(“标记.txt”,“a+”);fscanf(fp,“%d”,&num);fclose(fp);
fp=fopen(“password.txt”,“a+”);fscanf(fp,“%d”,&pass);fclose(fp);if(pass==0)
{
} fp=fopen(“password.txt”,“w+”);fprintf(fp,“%d”,88888888);fclose(fp);
fp=fopen(“记录.txt”,“a+”);rewind(fp);initialize(cars,num,fp);
fclose(fp);Delay(5);time_t timer;struct tm *tblock,*a;timer=time(NULL);a=localtime(&timer);while(1){ system(“cls”);fflush(stdin);printf(“所在地:%s站n登录时间:%sn”,address[startkey],mytime(a));printf(“┏━━━━━━━━━━━━━━━━━━━━━┓n”);printf(“┃
1.发卡
┃n”);printf(“┃
2.检卡并收费
┃n”);printf(“┃
3.查询
┃n”);printf(“┃
4.注销并退出系统
┃n”);printf(“┃
5.退出系统
┃n”);printf(“┗━━━━━━━━━━━━━━━━━━━━━┛n”);printf(“请选择,并输入序号:”);while(1){
while(scanf(“%d%c”,&key,&enter)==0 || enter!='n')
{
printf(“terror!!input again:”);
fflush(stdin);
}
fp=fopen(“标记.txt”,“r+”);
fscanf(fp,“%d”,&num);
fclose(fp);
fp=fopen(“记录.txt”,“r+”);
rewind(fp);
initialize(cars,num,fp);
fclose(fp);
j=0;
for(i=1;i<=9*NUM;i++){
if(cars[i].is_in=='y' && cars[i].station_in!=startkey && cars[i].station_out==0)
{
j++;
break;
} } k=0;for(m=1;m<=9*NUM;m++){
if(cars[m].is_in=='n' && cars[m].station_in==0 && cars[m].station_out==startkey)
{
k++;
cars[m].flag=k;
} } if((key==1 && k>0)||(key==2 && j>0)|| key==3 || key==4 || key==5)break;else if(key==2 && j==0){
printf(“t目前尚无车辆要离站!!input again:”);
fflush(stdin);
continue;} else if(key==1 && k==0){
printf(“t目前卡片不足!!input again:”);
fflush(stdin);
continue;} else {
printf(“terror!!input again:”);
fflush(stdin);
continue;} } if(key==1){ system(“cls”);timer=time(NULL);tblock=localtime(&timer);srand((unsigned)time(NULL));//用即时的系统时间来做随机数种子.生成随机数
choice=(rand()%k)+1;//随机生成choice,格式rand()%k即要求产生k以内的
for(m=1;m<=9*NUM;m++)
{
if(cars[m].is_in=='n' && cars[m].station_in==0 && cars[m].station_out==startkey && cars[m].flag==choice)
{
break;
}
}
printf(“卡号是:%dn现在时间是:%sn”,m,mytime(tblock));
cars[m].station_in=startkey;
cars[m].station_out=0;
strcpy(cars[m].time_in,mytime(tblock));
strcpy(cars[m].time_out,“无”);
num=1;
fp=fopen(“标记.txt”,“w+”);
fprintf(fp,“%d”,num);
fclose(fp);
fp=fopen(“记录.txt”,“w+”);
for(i=1;i<=9*NUM;i++)
{
fprintf(fp,“%d %d %c %lf %d %d %st%stn”,cars[i].card_num,cars[i].car_type,cars[i].is_in,cars[i].money,cars[i].station_in,cars[i].station_out,cars[i].time_in,cars[i].time_out);
}
fclose(fp);
printf(“┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓n”);
printf(“┃0.特殊车:军警车、紧急车
┃n”);
printf(“┃1.一类车:小轿车、吉普车、的士头人货车、摩托车
┃n”);
printf(“┃2.二类车:面包车、小型人货车、轻型货车、小型客车
┃n”);
printf(“┃3.三类车:中型客车、大型普通客车、中型货车、大型豪华客车┃n”);
printf(“┃4.四类车: 大型货车、大型拖(挂)车、20英尺集装箱车
┃n”);
printf(“┃5.五类车: 重型货车、重型拖(挂)车、40英尺集装箱车
┃n”);
printf(“┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛n”);
printf(“请选择车型,并输入序号:”);
while(1)
{
fflush(stdin);
while(scanf(“%d%c”,&size,&enter)==0 || enter!='n')
{
printf(“terror!!input again:”);
fflush(stdin);
}
if(size==0 || size==1 || size==2 || size==3 || size==4 || size==5)break;
else
{
printf(“terror!!input again:”);
continue;
}
}
cars[m].is_in='y';
cars[m].car_type=size;
fp=fopen(filename(startkey),“a+”);
fprintf(fp,“%30s%8d%12s%20snn”,mytime(tblock),m,kind[cars[m].car_type],“发卡,放行”);
fclose(fp);
fp=fopen(“标记.txt”,“w+”);
fprintf(fp,“%d”,num);
fclose(fp);
fp=fopen(“记录.txt”,“w+”);
for(i=1;i<=9*NUM;i++)
{
fprintf(fp,“%d %d %c %lf %d %d %st%stn”,cars[i].card_num,cars[i].car_type,cars[i].is_in,cars[i].money,cars[i].station_in,cars[i].station_out,cars[i].time_in,cars[i].time_out);
}
fclose(fp);
printf(“登记完毕,请发卡放行,并按任意键回到主菜单a”);
getche();
}
else if(key==2)
{
system(“cls”);
printf(“请输入卡号(按0返回):”);
while(1)
{
ch='y';
fflush(stdin);
while(scanf(“%d%c”,&choice,&enter)==0 || enter!='n')
{
printf(“terror!!input again:”);
fflush(stdin);
}
fp=fopen(“标记.txt”,“r+”);
fscanf(fp,“%d”,&num);
fclose(fp);
fp=fopen(“记录.txt”,“r+”);
rewind(fp);
initialize(cars,num,fp);
fclose(fp);
if(choice<0 || choice>9*NUM)
{
printf(“无此卡号...ntinput again:”);
continue;
}
else if(choice==0)
{
ch='n';
break;
}
else if(choice>0 && choice<=9*NUM && cars[choice].is_in=='n')
{
printf(“该卡号尚未发布...ntinput again:”);
continue;
}
else if(choice>0 && choice<=9*NUM && cars[choice].is_in=='y' && cars[choice].station_in!=startkey && cars[choice].station_out==0)
{
break;
}
else if(choice>0 && choice<=9*NUM && cars[choice].is_in=='y' && cars[choice].station_in==startkey && cars[choice].station_out==0)
{
printf(“该卡号车于%s从本站进入高速,尚在行...ntinput again:”,cars[choice].time_in);
continue;
}
else
{
printf(“terror!!input again:”);
continue;
}
}
if(ch=='n')continue;
cars[choice].station_out=startkey;
fp=fopen(“记录.txt”,“w+”);
for(i=1;i<=9*NUM;i++)
{
fprintf(fp,“%d %d %c %lf %d %d %st%stn”,cars[i].card_num,cars[i].car_type,cars[i].is_in,cars[i].money,cars[i].station_in,cars[i].station_out,cars[i].time_in,cars[i].time_out);
}
fclose(fp);
if(cars[choice].car_type==0)
{
printf(“该车于%s在%s进入高速,为特殊车,无需收费n”,cars[choice].time_in,address[cars[choice].station_in]);
}
else
{
i=abs(km[cars[choice].station_in]-km[cars[choice].station_out]);
money=cars[choice].money=i*price[cars[choice].car_type];
printf(“该车于%s在%s进入高速,需缴费%.1lf款:”,cars[choice].time_in,address[cars[choice].station_in],cars[choice].money);
fflush(stdin);
while(1)
{
while(scanf(“%lf%c”,&pay,&enter)==0 || enter!='n')
{
printf(“terror!!input again:”);
fflush(stdin);
}
if(pay>money)
{
printf(“缴付%.1lf元,找零%.1lf元...n”,pay,pay-money);
money=0;
break;
}
else if(pay { money=money-pay; printf(“缴付%.1lf元,需再缴付%.1lf元:”,pay,money); continue; } else { printf(“已缴费完毕,共收取人民币%.1lf元...n”,cars[choice].money); break; } } } timer=time(NULL); tblock=localtime(&timer); printf(“现在时间是:%sn”,mytime(tblock)); strcpy(cars[choice].time_out,mytime(tblock)); 元,请付 fp=fopen(“档案.txt”,“a+”); fprintf(fp,“%5d%12s%15s%30s%10.1lf元n”,choice,kind[cars[choice].car_type],address[cars[choice].station_in],cars[choice].time_in,cars[choice].money); fprintf(fp,“%32s%30snn”,address[cars[choice].station_out],cars[choice].time_out); fclose(fp); cars[choice].money=0; cars[choice].is_in='n'; cars[choice].station_in=0; cars[choice].station_out=startkey; strcpy(cars[choice].time_in,“无”); strcpy(cars[choice].time_out,“无”); fp=fopen(filename(startkey),“a+”); if(cars[choice].car_type==0)fprintf(fp,“%30s%8d%12s%20snn”,mytime(tblock),choice,kind[cars[choice].car_type],“收卡,放行”); else fprintf(fp,“%30s%8d%12s%20snn”,mytime(tblock),choice,kind[cars[choice].car_type],“缴费,收卡,放行”); fclose(fp); cars[choice].car_type=0; fp=fopen(“记录.txt”,“w+”); for(i=1;i<=9*NUM;i++) { fprintf(fp,“%d %d %c %lf %d %d %st%stn”,cars[i].card_num,cars[i].car_type,cars[i].is_in,cars[i].money,cars[i].station_in,cars[i].station_out,cars[i].time_in,cars[i].time_out); } fclose(fp); printf(“请收卡放行,并按任意键回到主菜单a”); getche(); } else if(key==3) { system(“cls”); refer(cars,startkey); } else if(key==4) { while(1) { system(“cls”); printf(“input password: ”); for(i=0;;) { fflush(stdin); ch=getch();if(ch=='r' || ch=='n') { break;} else if(ch=='b'){ if(i-->0) { pwd[i]=' '; printf(“b b”); //删除前个字符,光标退一个 } continue;} else if(i==max_len) { continue;} else { pwd[i++]=ch; //接收字符到密码中 printf(“*”);} } pwd[i]=' ';fp=fopen(“password.txt”,“a+”);rewind(fp);fscanf(fp,“%8s”,password);fclose(fp);if(strcmp(pwd,password)==0){ break;} else { printf(“n密码错误或空密码!!(空密码时系统规定为不能注销)n”);printf(“想再输一遍密码吗?(y or n):”);while(1){ fflush(stdin); ch=getche(); if(ch=='y' || ch=='Y') { system(“cls”); break; } else if(ch=='n' || ch=='N') { break; } else { printf(“b b”); continue; } } if(ch=='y' || ch=='Y')continue; else if(ch=='n' || ch=='N')break; } } if(ch=='n' || ch=='N')continue; i=0; for(j=1;j<=9;j++) { fp=fopen(filename(j),“w+”); fclose(fp); } fp=fopen(“记录.txt”,“w+”); fclose(fp); fp=fopen(“标记.txt”,“w+”); fprintf(fp,“%dn”,i); fclose(fp); fp=fopen(“档案.txt”,“w+”); fclose(fp); printf(“n注销成功!!n”); break; } else { fp=fopen(“记录.txt”,“w+”); for(i=1;i { fprintf(fp,“%d %d %c %lf %d %d %st%stn”,cars[i].card_num,cars[i].car_type,cars[i].is_in,cars[i].money,cars[i].station_in,cars[i].station_out,cars[i].time_in,cars[i].time_out); } fclose(fp); fp=fopen(“标记.txt”,“w+”); fprintf(fp,“%dn”,num); fclose(fp); break; } } return 0;} char *mytime(struct tm *timeptr) //获取系统时间的函数 { char wday_name[7][4]={“Sun”,“Mon”,“Tue”,“Wed”,“Thu”,“Fri”,“Sat”};static char result[29];sprintf(result,“%d年%d月%d日(%3s)%d:%d:%d ”,1900+timeptr->tm_year,1+timeptr->tm_mon,timeptr->tm_mday,wday_name[timeptr->tm_wday],timeptr->tm_hour,timeptr->tm_min, timeptr->tm_sec);return result;} char *filename(int startkey){ static char name[22];sprintf(name,“车辆处理与记录%d.txt”,startkey);return name;} void Delay(int n)//延时函数 { int i,j,k;for(i=1;i<=n;i++){ for(j=1;j<500;j++) { for(k=1;k<500;k++) { } } } } void initialize(struct car *cars,int num,FILE *fp)///初始化函数 { int i,j;if(num==0){ for(j=1;j<=9;j++) { for(i=NUM*(j-1)+1;i { cars[i].money=0; cars[i].card_num=i; cars[i].is_in='n'; cars[i].car_type=0; cars[i].station_in=0; cars[i].station_out=j; strcpy(cars[i].time_in,“无”); strcpy(cars[i].time_out,“无”); } } } else { for(i=1;i<=9*NUM;i++) { fscanf(fp,“%d %d %c %lf %d %d %st%stn”,&cars[i].card_num,&cars[i].car_type,&cars[i].is_in,&cars[i].money,&cars[i].station_in,&cars[i].station_out,cars[i].time_in,cars[i].time_out); } } } int refer(struct car *cars,int startkey)//查询 { FILE *fp;int i,j,key,num,k;char ch,enter;time_t timer;struct tm *tblock; while(1){ system(“cls”); printf(“┏━━━━━━━━━━━━━━━━━━━━┓n”); printf(“┃ ****资料查询**** ┃n”); printf(“┃ 1.里程价 ┃n”); printf(“┃ 2.汽车类型 ┃n”); printf(“┃ 3.沿线站点间里程 ┃n”); printf(“┃ 4.高速通车情况 ┃n”); printf(“┃ 5.道路交通安全法实施条例 ┃n”);printf(“┃ 6.车辆处理与记录 ┃n”);printf(“┃ 0.回到主菜单 ┃n”);printf(“┗━━━━━━━━━━━━━━━━━━━━┛n”);printf(“请选择,并输入序号:”);while(1){ fflush(stdin);while(scanf(“%d%c”,&key,&enter)==0 || enter!='n'){ printf(“terror!!input again:”); fflush(stdin);} if(key==1 || key==2 || key==3 || key==4 || key==5 || key==6 || key==0){ system(“cls”); switch(key) { case 1: { printf(“t里程价n”); for(i=1;i<6;i++) { printf(“%s:%.1lf元/公里n”,kind[i],price[i]); } printf(“nt按任意键回到查询菜单”); fflush(stdin); getche(); break; } case 2: { printf(“t汽车类型n”); printf(“一类车:小轿车、吉普车、的士头人货车、摩托车n”); printf(“二类车:面包车、小型人货车、轻型货车、小型客车n”); printf(“三类车:中型客车、大型普通客车、中型货车、大型豪华客车n”); printf(“四类车: 大型货车、大型拖(挂)车、20英尺集装箱车n”); printf(“五类车: 重型货车、重型拖(挂)车、40英尺集装箱车n”); printf(“nt按任意键回到查询菜单”); fflush(stdin); getche(); break; } case 3: { printf(“t沿线站点间里程n”);printf(“┏━━━━━━━━━━━━━━━━━━━━┓n”);printf(“┃ 1.湛江 2.茂名 3.阳江 ┃n”);printf(“┃ 4.开平 5.佛山 6.广州 ┃n”);printf(“┃ 7.深圳 8.汕头 9.汾水关 ┃n”);printf(“┗━━━━━━━━━━━━━━━━━━━━┛n”);printf(“请选择起始站,并输入序号:”);fflush(stdin);while(1){ while(scanf(“%d%c”,&i,&enter)==0 || enter!='n'){ printf(“terror!!input again:”); fflush(stdin);} if(i==1 || i==2 || i==3 || i==4 || i==5 || i==6 || i==7 || i==8 || i==9)break;else { printf(“terror!!input again:”); continue;} } printf(“请选择终点站,并输入序号:”);fflush(stdin);while(1){ while(scanf(“%d%c”,&j,&enter)==0 || enter!='n'){ printf(“terror!!input again:”); fflush(stdin);} if(j==1 || j==2 || j==3 || j==4 || j==5 || j==6 || j==7 || j==8 || j==9)break;else { printf(“terror!!input again:”); continue;} } printf(“tt里程为:%d公里.n”,abs(km[i]-km[j]));printf(“nt按任意键回到查询菜单”);fflush(stdin);getche();break; “); } case 4: { fp=fopen(”标记.txt“,”r+“); fscanf(fp,”%d“,&num); fclose(fp); fp=fopen(”记录.txt“,”r+“); rewind(fp); initialize(cars,num,fp); fclose(fp); j=0; k=0; for(i=1;i<=9*NUM;i++) { if(cars[i].station_in!=0 && cars[i].station_out==0)j++; if(cars[i].station_in!=0 && cars[i].station_out!=0)k++; } timer=time(NULL); tblock=localtime(&timer); printf(”现在时间是:%sn“,mytime(tblock)); printf(”在行车辆:共%d辆.n“,j); if(k>0)printf(”t且有%d辆车正在缴费处缴费,尚未离开.nn“,k); printf(”t以下为此高速公路通车情况.nnnn“); printf(”%5s%12s%15s%30s%10sn“,”卡号“,”车型“,”进/出站点“,”进/出时间“,”金额 fp=fopen(“档案.txt”,“a+”); rewind(fp); fflush(stdin); while(feof(fp)==0) { fflush(stdin); ch=fgetc(fp); putch(ch); } fclose(fp); printf(“t按任意键回到查询菜单”); fflush(stdin); getche(); break;} case 5: { fp=fopen(“广东省道路交通安全法实施条例.txt”,“a+”);printf(“t广东省道路交通安全法实施条例n”); } case 6: { } case 0: rewind(fp);fflush(stdin);while(1){ for(i=0;(i<4000 && feof(fp)==0)||(i>=4000 && ch!='n' && feof(fp)==0);i++){ fflush(stdin); ch=fgetc(fp); putch(ch);} if(feof(fp)==0){ printf(“nnt按任意键翻到下一页”); getche(); system(“cls”); continue;} else break;} fclose(fp);printf(“t按任意键回到查询菜单”);fflush(stdin);getche();break; printf(“%30s%8s%12s%20sn”,“时间”,“卡号”,“车型”,“处理情况”);fp=fopen(filename(startkey),“a+”);rewind(fp);fflush(stdin);while(feof(fp)==0){ fflush(stdin);ch=fgetc(fp);putch(ch);} fclose(fp);printf(“t按任意键回到查询菜单”);fflush(stdin);getche();break; } } } { return 0; break; } } } else { printf(“terror!!input again:”);continue;} if(key==1 || key==2 || key==3 || key==4 || key==5 || key==6)break; 一、登陆界面 运行本系统需要进行用户名和密码验证,没有用户名的可以在登陆界面注册,详细注册方法在下文有介绍。登陆界面效果图如图1-1: 图1-1 登陆界面设计的代码如下: Private Sub Command1_Click()str1 = Text1.Text str2 = Text2.Text STRSQL = “SELECT * FROM 密码表 WHERE 用户名='” & str1 & “'” + “ AND 密码='” & str2 & “ '” Data1.RecordSource = STRSQL Data1.Refresh If Data1.Recordset.EOF Then MsgBox “用户名或密码错!”, 16, 提示“ Else Form8.Show Form1.Hide End If End Sub Private Sub Command2_Click() End End Sub Private Sub Command3_Click() Form6.Show End Sub Private Sub Timer1_Timer() Label1.Caption = Time End Sub 二、欢迎界面 当用户名和密码验证成功后即可进入欢迎界面如图2-1 图2-1 在欢迎界面的设计时用了一个时钟控件,让欢迎界面出现3秒后自动消失进入系统主界面,欢迎界面的代码设计如下: Private Sub Timer1_Timer() If Timer1.Enabled = True Then Form8.Hide Form2.Show Timer1.Enabled = False End If End Sub 三、系统主界面 系统主界面可以进行简单的信息浏览(如图3-1),在主界面设置了一些命令按扭,其中 “修改”、“删除”、“打印”可以在主界面直接进行,而“查询”和“添加”需要打开另一个窗体操作。代码设计如下: Private Sub Command6_Click() Data1.Recordset.MoveFirst End Sub Private Sub Command7_Click() Data1.Recordset.MovePrevious If Data1.Recordset.BOF Then Data1.Recordset.MoveFirst End Sub Private Sub Command8_Click() Data1.Recordset.MoveNext If Data1.Recordset.EOF Then Data1.Recordset.MoveLast End Sub Private Sub Command9_Click() Data1.Recordset.MoveLast End Sub Private Sub Form_Load() Timer1.Enabled = True Label11.Left = Me.Width End Sub Private Sub Command10_Click()DataReport1.Show End Sub Private Sub Command3_Click() ans = MsgBox(”确认修改Ä?“, 32 + 1, 提示”) If ans = 1 Then mbookmark = Data1.Recordset.Bookmark Data1.Recordset.Edit End If End Sub Private Sub Command4_Click() On Error Resume Next Data1.Recordset.Delete Data1.Recordset.MoveNext If Data1.Recordset.EOF Then Data1.Recordset.MoveLast MsgBox “确认删除?”, 32 + 1, “提示” End Sub Private Sub Timer1_Timer() Label11.Left = Label11.Left-200 If Label11.Left <=-Label11.Width Then Form2.BackColor = vbRed End If End Sub Private Sub Timer2_Timer() Label12.Caption = Time End Sub 图3-1 四、查询 查询的效果图如图4-1 图4-1 代码设计如下: Private Sub Command1_Click() a = “select * from学生档案 where ” n = 0 If Check1.Value = Checked Then a = a + “ 姓名='” + DataCombo1 + “'” Adodc1.RecordSource = a Adodc1.Refresh n = 1 End If If Check2.Value = Checked Then If n = 1 Then a = a + “ and ” End If a = a + “ 学号 ='” + DataCombo2 + “'” Adodc1.RecordSource = a Adodc1.Refresh n = 1 End If If Check3.Value = Checked Then If n = 1 Then a = a + “ and ” End If a = a + “ 院系='” + DataCombo3 + “'” Adodc1.RecordSource = a Adodc1.Refresh n = 1 End If If Check4.Value = Checked Then If n = 1 Then a = a + “ and ” End If a = a + “ 专业='” + DataCombo4 + “'” Adodc1.RecordSource = a Adodc1.Refresh n = 1 End If If Check5.Value = Checked Then If n = 1 Then a = a + “ and ” End If a = a + “ 班级='” + DataCombo5+ “'” Adodc1.RecordSource = a Adodc1.Refresh n = 1 End If If Check6.Value = Checked Then If n = 1 Then a = a + “ and ” End If a = a + “ 入学时间='” + DataCombo6 + “'” Adodc1.RecordSource = a Adodc1.Refresh n = 1 End If End Sub 五、添加 添加效果图如图5-1 图5-1 代码设计如下: Private Sub Command1_Click() If Command1.Caption = “Ìí¼Ó” Then Command1.Caption = “È·ÈÏ” mbookmark = Data1.Recordset.Bookmark Data1.Recordset.AddNew Data1.Recordset.MoveLast Data1.Refresh Text1(0).SetFocus End If MsgBox “È·ÈÏÌí¼Ó?”, 32 + 1, “Ìáʾ” End Sub Private Sub Command2_Click()For i = 0 To 13 Text1(i)= “" Next i Text1(0).SetFocus End Sub Private Sub Command3_Click() Unload Form4 End Sub 六、修改、删除、打印 这部分的效果图如图6- 1、图6-2 图6-1 图6-2 代码设计如下: Private Sub Command4_Click() On Error Resume Next Data1.Recordset.Delete Data1.Recordset.MoveNext If Data1.Recordset.EOF Then Data1.Recordset.MoveLast MsgBox ”确认删除?“, 32 + 1, ”提示“ End Sub Private Sub Command3_Click() ans = MsgBox(”确认修改?“, 32 + 1, ”提示“) If ans = 1 Then mbookmark = Data1.Recordset.Bookmark Data1.Recordset.Edit End If End Sub Private Sub Command6_Click() Data1.Recordset.MoveFirst End Sub 七、统计 必须添加一个MSFlexGrid控件与Data控件连接,用来保存统计的结果,统计的效果图如图7-1 图7-1 代码设计如下: Private Sub Command2_Click(Index As Integer) Data1.RecordSource = ”select 院系,count(*)as人数 from学生档案¸ group by 院系“ Data1.Refresh End Sub Private Sub Command3_Click() Data1.RecordSource = ”select专业,count(*)as人数 from学生档案¸ group by 专业“ Data1.Refresh End Sub Private Sub Command4_Click() Data1.RecordSource = ”select 入学时间,count(*)as人数 from学生档案¸ group by入学时间“ Data1.Refresh End Sub Private Sub Command5_Click() Data1.RecordSource = ”select 籍贯,count(*)as人数 from学生档案¸ group by 籍贯“ Data1.Refresh End Sub Private Sub Command6_Click() Data1.RecordSource = ”select 民族,count(*)as人数 from学生档案¸ group by 民族“ Data1.Refresh End Sub Private Sub Command7_Click() Data1.RecordSource = ”select 政治面貌,count(*)as人数 from学生档案¸ group by 政治面貌“ Data1.Refresh End Sub Private Sub Command8_Click() Unload Form9 End Sub 八、帐户管理 (一)帐号注册 由于本系统登陆需要用户名和密码验证,所以本系统设置了一个帐号注册的功能,其效果图如图8- 1、图8-2 图8-1 图8-2 帐号注册代码设计如下: Private Sub Command1_Click()If Text1.Text = ”“ Then MsgBox ”你没有输入用户名!“, 16, ”提示“ Exit Sub End If If Text2.Text = ”“ Then MsgBox ”你没有输入密码!“, 16, ”提示“ Exit Sub End If If Text3.Text = ”“ Then MsgBox ”你没有再次输入密码!“, 16, ”提示“ Exit Sub End If If Text2.Text <> Text3.Text Then MsgBox ”两次输入的密码不一致!“, 16, ”提示“ Exit Sub End If If Text2.Text = Text3.Text Then If Command1.Caption = ”注册“ Then Command1.Caption = ”确认“ mbookmark = Data1.Recordset.Bookmark Data1.Recordset.AddNew Text1.SetFocus Else Command1.Caption = ”注册“ Data1.Recordset.Update Data1.Recordset.MoveLast End If Text3.Text = ”“ MsgBox ”恭喜你注册成功!“, 48, ”欢迎使用“ End If End Sub (二)密码修改 密码修改的效果图如图8- 3、图8-4 图8-3 图8-4 密码修改代码设计如下: Private Sub Command1_Click()If Text1.Text = ”“ Then MsgBox ”你没有输入用户名!“, 16, ”提示“ Exit Sub End If If Text2.Text = ”“ Then MsgBox ”你没有输入旧密码!“, 16, ”提示“ Exit Sub End If If Text2.Text <> Text3.Text Then MsgBox ”旧密码错误!“, 16, ”提示“ Exit Sub End If If Text3.Text = ”“ Then MsgBox ”你没有输入新密码!“, 16, ”提示“ Exit Sub End If If Text4.Text = ”“ Then MsgBox ”你没有再次输入新密码!“, 16, ”提示“ Exit Sub End If If Text3.Text <> Text4.Text Then MsgBox ”两次输入的密码不一致!“, 16, ”提示“ Exit Sub End If If Text3.Text = Text4.Text Then prompt = ”确认修改?“ answer = MsgBox(prompt, 32 + 0, ”确认修改“) If answer = vbYes Then Data1.Recordset.Edit Data1.Recordset.Fields(0)= Trim(Text1.Text) Data1.Recordset.Fields(1)= Trim(Text3.Text) Data1.Recordset.Update Data1.Refresh MsgBox ”密码修改成功!“, vbOKOnly, ”密码修改“ End If End If End Sub (三)帐号注销 效果图如图8-5 图8-5 代码设计如下: Private Sub Command1_Click()If Text1.Text = ”“ Then MsgBox ”你没有输入用户名!“, 16, ”提示“ Exit Sub End If If Text2.Text = ”“ Then MsgBox ”你没有输入旧密码!“, 16, ”提示“ Exit Sub End If If Text2.Text <> Text3.Text Then MsgBox ”旧密码错误!“, 16, ”提示“ Exit Sub End If If Text2.Text = Text3.Text Then On Error Resume Next Data1.Recordset.Delete Data1.Recordset.MoveNext If Data1.Recordset.EOF Then Data1.Recordset.MoveLast MsgBox ”确认注销该用户?“, 32 + 1, ”提示" End If End Sub 题目一 模拟操作系统设计 设计一个模拟操作系统管理程序,实现下列管理功能: 1.内存管理功能 2.文件管理功能 3.磁盘管理功能 题目二 虚拟存储器各页面置换算法的实现与比较 内 容:设计一个虚拟存储区和内存工作区,通过产生一个随机数的方法得到一个页面序列,假设内存给定的页面数由键盘输入,分别计算使用下述各方法时的内存命中率: 先进先出算法(FIFO)、最近最少使用算法(LRU)、最佳淘汰算法(OPT)、最少访问页面算法(LFU)等。 参考资料 题目二 资料 虚拟存储器各页面置换算法的实现与比较 1.实验目的 存储管理的主要功能之一是合理的分配空间。请求页式管理是一种常用的虚拟存储管理技术。 本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。2.实验内容 (1)通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成: 1)50%的指令是顺序执行的; 2)25%的指令是均匀分布在前地址部分; 3)25%的指令是均匀分布在后地址部分; 具体的实施方法是: 1)在[0,319]的指令地址之间随机选取一起点m; 2)顺序执行一条指令,即执行地址为m+1的指令; 3)在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m'; 4)顺序执行一条指令,其地址为m'+1; 5)在后地址[m'+2,319]中随机选取一条指令并执行; 6)重复上述步骤1)-5),直到执行320次指令。(2)将指令序列变换成为页地址流 设:1)页面大小为1k; 2)用户内存容量为4页到32页; 3)用户虚存容量为32k; 在用户虚存中,按每k存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为: 第0条-第9条指令为第0页(对应虚存地址为[0,9]); 第10条-第19条指令为第1页(对应虚存地址为[10,19]); ...第310条-第319条指令为第31页(对应虚存地址为[310,319]); 按以上方式,用户指令可组成为32页。 (3)计算并输出下列各种算法在不同内存容量下的命中率。1)先进先出的算法(FIFO); 2)最近最少使用算法(LRR);3)最佳淘汰算法(OPT):先淘汰最不常用的页地址; 4)最少访问页面算法(LF.U); 5)最近最不经常使用算法(NUR)。其中3)和4)为选择内容。命中率=1-页面失效次数/页地址流长度 在本实验中,页地址流长度为320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。3.随机数产生办法 关于随机数产生办法,Linux或Unix系统提供函数srand()和rand(),分别进行初始化和产生随机数。例如: srand(); 语句可初始化一个随机数; a[0]=10*rand()/32767*319+1;a[1]=10*rand()/32767*a[0]; ..语句可用来产生a[0]与a[1]中的随机数。 提示: 首先用Srand()和rand()函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。 命中率=1-页面失效次数/页地址流长度 1、数据结构 (1)页面类型 typedef struct{ int pn,pfn,counter,time;}pl-type; 其中pn为页号,pfn为页面号,count为一个周期内访问该页面的次数,time为访问时间。 (2)页面控制结构 pfc_struct{ int pn,pfn; struct pfc_struct *next; };typedef struct pfc_struct pfc_type;pfc_type pfc[total_vp],*freepf_head,*busypf_head;pfc_type *busypf_tail;其中,pfc[total_vp]定义用户进程虚页控制结构,*freepf_head为空页面头的指针,*busypf_head为忙页面头的指针,*busyf_tail为忙页面尾的指针。 2、函数定义 (1)Void initialize():初始化函数,给每个相关的页面赋值。(2)Void FIFO():计算使用FIFO算法时的命中率。(2)Void LRU():计算使用FIFO算法时的命中率。(4)VoidOPT():计算使用OPT算法时的命中率。(5)Void LFU():计算使用LFU算法时的命中率。(6)Void NUR():计算使用NUR算法时的命中率。 3、变量定义 (1)int a[tatal_instruction] :指令流数据组。 (2)int page[total_instruction]:每条指令所属页号。 (3)int offset[total_instruction]:每页装入不敷出0条指令后取模运算页号偏移量。(4)int total_pf:用户进程的内存页面数。(5)int diseffect:页面失效次数。 程序清单 程序: 程序: #include “stdio.h” #include “process.h” #include “stdlib.h” #define TRUE 1 #define FALSE 0 #define INVALID-1 #define null 0 #define total_instruction 320 /*指令流长*/ #define total_vp 32 /*虚页长*/ #define clear_period 50 /*清0周期*/ typedef struct { int pn,pfn,counter,time;}pl_type;pl_type pl[total_vp];/*页面数据结构*/ struct pfc_struct{ /*页面控制结构*/ int pn,pfn;struct pfc_struct *next;};typedef struct pfc_struct pfc_type;pfc_type pfc[total_vp],*freepf_head,*busypf_head,*busypf_tail;int diseffect,a[total_instruction];int page[total_instruction],offset[total_instruction];void initialize();void FIFO();void LRU();void OPT();void LFU();void NUR();main(){ int S,i,j;srand(getpid()*10);/*由于每次运行时进程号不同,故可用来作为初始化随机数队 列的种子*/ S=(float)319*rand()/32767+1;for(i=0;i busypf_head=busypf_tail=freepf_head;else {busypf_tail->next=freepf_head;busypf_tail=freepf_head;} freepf_head=p;} } printf(“FIFO:%6.4”,1-(float)diseffect/320);} void LRU(total_pf)/*LRU*/ int total_pf;{ int min,minj,i,j,present_time;initialize(total_pf);present_time=0;for(i=0;i 1、操作系统实验教程 张丽芬编著 清华大学出版社 2、操作系统原理实验教程(基于Linux)胡峰松编 清华大学出版社第四篇:vb课程设计档案管理系统代码
第五篇:操作系统课程设计题目及代码