⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adstd.c

📁 这是我的课程设计 由于时间有限
💻 C
📖 第 1 页 / 共 2 页
字号:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#define PER 8 /*设定成绩记录每页显示的数目*/
/*bioskey(0)>>8 所得值宏命名*/
#define ESC 1
#define LEFT 75
#define RIGHT 77
#define TOP 72
#define DOWN 80
#define S 31
#define I 23
#define M 50
#define D 32
#define P 25
#define X 45
#define F4 62
#define F5 63
#define F6 64
#define F7 65
/*getch()所得值宏命名*/
#define CESC 1
#define CBACK 8
#define CSPACE 32
#define CENTER 13
#define CTAB 9
#define CSHIFT_P 80 /*shift+p之值*/

/*--------------------定义结构数据类型------------------------*/
typedef struct stdc{
	char name[10];  /*学生姓名*/
	int no; /*学生学号*/
	int chs; /*语文的分数*/
	int math;/* 数学的分数*/
	int phy;/*物理*/
	int che;/*化学*/
	int eng;/*英语*/
	int all;/*总分*/
	int wtall;/* 加权总分*/
	int que;/*名次*/
	float aver;/*平均分*/
}stdscore;
typedef struct me1{
/*-------------------成绩数据基本参数结构数据类型,学分的设定------------------------*/
	int chs; /*语文的学分*/
	int math;/* 数学的学分*/
	int phy;/*物理*/
	int che;/*化学*/
	int eng;/*英语*/
}me1;
/*--------------------定义结构数据类型结束------------------------*/

/*--------------------定义外部变量,便于函数与主函数以及各函数之间交流数据------------------------*/
char gword[20];   /*存放外部输入数据*/
FILE *fpme;
FILE *fpstd;
stdscore std[60];  /*为使程序简单起见,本程序默认班上只有六十个同学*/
int stdi=0;/*记录std数组的当前位置(下标)根据该值确定学生个数*/
int isfget=0;/*标记数据文件是否已连接*/
char gcmd='z';/*传递内部函数相关命令,默认为Z,表示未专递任何命令*/
char gstr[50];/*用以存放getstr()函数所获得的数据的外部变量,以便交流数据*/
/*--------------------定义外部变量结束------------------------*/

void box(int startx,int starty,int endx,int endy){
/*--------------------定义画边框函数------------------------*/
	int i;
	gotoxy(startx,starty);
	putch(0xda);
	for(i=startx+1;i<endx;i++){
		putch(0xc4);
	}
	putch(0xbf);
	for(i=starty+1;i<endy;i++){
		gotoxy(startx,i);
		putch(0xb3);
		gotoxy(endx,i);
		putch(0xb3);
	}
	gotoxy(startx,endy);
	putch(0xc0);
	for(i=startx+1;i<endx;i++)putch(0xc4);
	putch(0xd9);
}

void windowbg(int starty,int endy,int cl){
/*---------将本窗口背景颜色初始化--------*/
	int i;
	textbackground(cl);
	for(i=0;i<=endy-starty;i++)insline();
}
gstrinit(){
	/*初始化gstr[50]*/
	int i=0;
	for(i=0;i<50;i++)gstr[i]='\0';
}
char *intos(int num){
	char ax[50];
	if(num==0){
		ax[0]='\0';return ax;
	}
	return itoa(num,ax,10);

}
int getstr(int amax,int px,int py,char *p,int allow){
/*------从键盘获得数据并进行相应处理,不允许输入空格,可以勉强有效控制用户乱输入数据,因时间有限,可能有缺陷-------*/
/*---amax表示允许的最大字符数-------*/
/*---allow表示允许的输入的数据类型,如果其值为1表示整型,2表示字符串-------*/
/*---p给出初始数据-------*/
/*---px,py表示准备输入时之光标横纵坐标-------*/
/*---ny(返回值)表示输入完毕后光标纵坐标的的移动。其值为正负一-------*/
	char ch;
	int ny,i,minpx;
	minpx=px;
	for(i=px;i<px+amax;i++)cprintf(" ");/*----首先将px到px+amax位置全部用空格占掉-----*/
	gotoxy(px,py);
	strcpy(gstr,p);
	for(i=0;gstr[i];i++){
		cprintf("%c",gstr[i]);px++;
	}
	for(i=0;i<50;){
		ch=getch();
		if(allow==1&&ch>='0'&&ch<='9'&&i+1<=amax){
			/*当输入整型数时*/
			cprintf("%c",ch);
			px++;
			gstr[i]=ch;
			i++;
		}
		if(ch==CBACK&&px>minpx){
			/*当按下back space键时*/
			px--;
			gotoxy(px,py);
			cprintf(" ");
			gotoxy(px,py);i--;
			gstr[i]='\0';
			continue;
		}
		if(ch==CSPACE){
			/*当按下空格键时*/
			continue;
		}
		if(ch==CTAB){
			/*当按下tab键时*/
			ny=1;
			return ny;
		}
		if(ch==CSHIFT_P||ch==CSHIFT_P+32){
			/*当按下shift+p键时,执行shift+tab类似功能*/
			ny=-1;
			return ny;
		}
		if(ch==CENTER){
			/*当按下回车时,初步提交数据*/
			ny=0;
			return ny;
		}
		if(allow==2&&i+1<=amax&&ch!=CBACK){
			/*当输入字符串时*/
			cprintf("%c",ch);
			px++;
			gstr[i]=ch;
			i++;
		}
	}
}
mputc(char me,char *p,int cl){
/*----------将字符红色显示,并用()括起来。将颜色还原为cl------------*/
	
	char kw='(';
	textcolor(cl);
	cprintf("%c",kw);
	textcolor(4);
	cprintf("%c",me);
	textcolor(cl);
	kw=')';
	cprintf("%c",kw);
	cprintf("%s",p);
}
init(){
/*全屏显示处理开始*/
	int i;
	int j;
	window(1,1,80,25);
	clrscr();
	windowbg(1,25,1); /*全屏背景设计为蓝色*/
	box(2,2,80,25);
	box(3,5,60,21);  /*主信息输出区边框*/
	
	window(3,2,80,4);
	gotoxy(25,1);
	cprintf("03级计算机课程设计系列之--成绩管理系统");
	gotoxy(2,2);
	for(i=0;i<=74;i++)cprintf("=");
	window(4,4,78,19);  /*上主菜单栏目窗口区*/
	gotoxy(3,1);
	
	mputc('I',"插入  ",14);
	mputc('M',"修改  ",14);
	mputc('D',"删除  ",14);
	mputc('X',"学分设置  ",14);
	
	window(4,6,59,21);   /*主信息输出窗口工作区初始化*/
	gotoxy(10+5,3);cprintf("欢迎使用本成绩管理系统!");
	gotoxy(10+5,5+1);cprintf("学生:陈欢");
	gotoxy(10+5,6+1);cprintf("类型:课程设计");
	gotoxy(10+5,7+1);cprintf("班级:03级计算机6班");
	gotoxy(10,9+1);cprintf("当前为本程序主界面,请按相应快捷键进行操作");
	window(3,22,80,23); /*下信息输出窗口工作区*/
	gotoxy(2,1);
	for(i=0;i<=74;i++)cprintf("=");
	gotoxy(2,2);cprintf(" 学生:陈欢 类型:课程设计  班级:03级计算机6班");
	window(62,6,78,21); /*右窗口工作区*/
	i=1;
	gotoxy(1,i++);cprintf("[F7] 连接数据");
	gotoxy(1,i++);cprintf("[F4] 显示成绩");
	gotoxy(1,i++);cprintf("[F6] 保存数据");
	gotoxy(1,i++);cprintf("[F5] 全屏刷新");
	gotoxy(1,i++);cprintf("[ESC]退出本系统");
	gotoxy(1,i++);for(j=0;j<=16;j++)cprintf("*");
	gotoxy(1,i++);cprintf("快捷键使用说明");i++;
	gotoxy(1,i++);cprintf("    快捷键为[]或");
	gotoxy(1,i++);cprintf("()内的键名。");
	gotoxy(1,i++);for(j=0;j<=16;j++)cprintf("*");
	gotoxy(1,i++);cprintf("警告:数据输入不");
	gotoxy(1,i++);cprintf("要乱输入数据,否");
	gotoxy(1,i++);cprintf("则你不能正常使用");
	gotoxy(1,i++);cprintf("本系统!");
/*全屏显示处理结束*/
}


getdata(){
	/*从硬盘数据文件获取数据于内存std[stdi]数组中*/
	if((fpstd=fopen("std.db","rb"))==NULL){
		fclose(fpstd);
		stdi=0;
		if((fpstd=fopen("std.db","wb"))==NULL){
			clrscr();
			gotoxy(5,4);
			cprintf("操作失败,相关数据连接失败");
			return;
		}
	}
	for(stdi=0;!feof(fpstd);stdi++)fread(&std[stdi],sizeof(stdscore),1,fpstd);
	stdi--;
	fclose(fpstd);
	isfget=1;/*标记数据文件已经连接*/
	window(4,6,59,21);  /*主信息输出窗口工作区*/
	clrscr();
	gotoxy(10,8);
	cprintf("数据已经成功连接");
}
dsave(){
	int i;
	char ch;
	window(4,6,59,21);  /*主信息输出窗口工作区*/
	clrscr();
	if((fpstd=fopen("std.db","wb"))==NULL){
		clrscr();
		gotoxy(10,4);
		cprintf("操作失败,相关数据连接失败");
		return;
	}
	for(i=0;i<stdi;i++)fwrite(&std[i],sizeof(stdscore),1,fpstd);	
	fclose(fpstd);
	gotoxy(10,8);
	cprintf("恭喜!数据库更新成功!");
	
	return;	
	
}
sysinit(){
/*学分初始设置*/
	int k=0;
	int j=0,isok;
	char ch,ach;
	me1 objsys;
	
	int xf[5]={0,0,0,0,0};
	window(4,6,59,21);  /*主信息输出窗口工作区*/
	clrscr();
	gotoxy(12,5);cprintf("  各科学分初始设置");
	gotoxy(4,6);cprintf("[TAB]键移动填写下一项,[shift+p]键移动光标到第一项");
	gotoxy(10,8);cprintf("语文:[  ]");
	gotoxy(10,9);cprintf("数学:[  ]");
	gotoxy(10,10);cprintf("物理:[  ]");
	gotoxy(10,11);cprintf("化学:[  ]");
	gotoxy(10,12);cprintf("英语:[  ]");
	gotoxy(10+7,8);
	j=0;
	for(k=0;k<5;){
		while(!gstr[0])isok=getstr(1,10+7,8+j,intos(xf[k]),1);
		xf[k]=atoi(gstr);gstrinit();
		if(isok==0)break;
		if(isok==1){j++;k++;}
		if(isok==-1){j=0;k=0;}
	}
	gotoxy(10+7,8+6);
	cprintf("  [Y]确认 [N]取消");
	for(;;){
		
		ch=getch();
		if(ch=='Y'||ch=='y'){
			objsys.chs=xf[0];
			objsys.math=xf[1];
			objsys.phy=xf[2];
			objsys.che=xf[3];
			objsys.eng=xf[4];
			if((fpme=fopen("me.db","wb"))==NULL){
				cprintf("文件打开出错!");
				return;
			}
			fwrite(&objsys,sizeof(me1),1,fpme);
			fclose(fpme);
			clrscr();
			gotoxy(10+7,13);
			cprintf("操作成功,按任意键回主界面");
			while(!bioskey(1));
			init();	return;	
		}
		if(ch=='N'||ch=='n') {init();return;}
	}
}
gque(int m){
	/*将std[60]中的数据进行相关从小到大排序,m为1表示按学号排,m为2表示按名次排*/
	stdscore tmt;
	int i,j,f=0;
	for(i=0;i<stdi;i++){
		for(j=i+1;j<stdi;j++){
			if(m==1)f=(std[i].no>std[j].no);
			if(m==2)f=(std[i].que>std[j].que);
			if(m==3)f=(std[i].wtall<std[j].wtall);/*学积分按降序排列*/
			if(m==11)f=(std[i].chs>std[j].chs);
			if(m==12)f=(std[i].math>std[j].math);
			if(m==13)f=(std[i].phy>std[j].phy);
			if(m==14)f=(std[i].che>std[j].che);
			if(m==15)f=(std[i].eng>std[j].eng);
			if(f){
				tmt=std[i];
				std[i]=std[j];
				std[j]=tmt;
			}
		}
	}
	
	
}
xuef(){
/*学分查看与设置*/
	int j=0;
	char cha;
	me1 objsys;
	window(4,6,59,21);  /*主信息输出窗口工作区*/
	clrscr();
	gotoxy(10,5);cprintf("  各科学分管理");
	gotoxy(10,8);cprintf("语文:[  ]");
	gotoxy(10,9);cprintf("数学:[  ]");
	gotoxy(10,10);cprintf("物理:[  ]");
	gotoxy(10,11);cprintf("化学:[  ]");
	gotoxy(10,12);cprintf("英语:[  ]");
	gotoxy(10+7,8);
	if((fpme=fopen("me.db","rb"))==NULL){
		gotoxy(10,6);cprintf("系统检测到你还没有设置各科学分!");
		gotoxy(10,7);cprintf("      是否立即设置[y/n]?");
		cha=getch();
		for(;;){
			if(cha=='y'||cha=='Y') {sysinit();return;}
			if(cha=='n'||cha=='N'){
				clrscr();
				gotoxy(15,8);
				cprintf("操作已取消!");
				return;
			}
		}
	}
	fread(&objsys,sizeof(me1),1,fpme);
	gotoxy(10+7,8+j);j++;
	cprintf("%d",objsys.chs);gotoxy(10+7,8+j);j++;
	cprintf("%d",objsys.math);gotoxy(10+7,8+j);j++;
	cprintf("%d",objsys.phy);gotoxy(10+7,8+j);j++;
	cprintf("%d",objsys.che);gotoxy(10+7,8+j);j++;
	cprintf("%d",objsys.eng);j++;
	gotoxy(10+7,8+j);j=0;
	cprintf("  [M]修改 [N]取消");
	
	for(;;){
		cha=getch();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -