学生信息录入模块C语言

学生信息录入模块C语言,第1张

/*主程序功能模块—-文件名:student.c*/

#define MAX_BAR 4 /*最大菜单数,可以自定*/

#include"io.h"

#include"dos.h"

#include"fcntl.h"

#include"stdio.h"

#include"stdlib.h"

#include"math.h"

#include"graphics.h"

#include"chi_asc.c" /*调用图形模式下汉字、字符共显功能*/

#include"public.c" /*按键定义功能*/

#include"mypcx.c" /*封面图象调用功能,此处为pcx图象*/

#include"stu_frame.c" /*框架绘制功能*/

#include"stu_sub.c" /*各子菜单功能*/

main()

{

/*old_bar、curr_bar表示上次选中的菜单、当前选中的菜单*/

/*old_sonbar curr_sonbar表示上次选中的子菜单、当前选中的子菜单*/

int i,key,key_son,old_bar,curr_bar,curr_sonbar,old_sonbar,size

int save_startx,save_starty,save_endx,save_endy,sonbar_out=0

void *buf

int Driver,Mode

char *pcx

struct student_bar{

int start_x,start_y/*起始横坐标,起始纵坐标*/

int length_x,length_y/*菜单的长,菜单的宽*/

int num_son/*包含子菜单的个数*/

char *p_father/*菜单项名,*p_son[5]为子菜单名*/

char *p_son[5]}stu_bar[MAX_BAR]={

{10,45,120,25,4,"File Operation",{" Open file"," New file"," Save file","Exit system"}},

{130,45,120,25,3,"Data Edition",{" Add object","Delete object","Modify object"}},

{250,45,120,25,0,"File Print",{""}},

{370,45,120,25,0,"Help Message",{""}}

}/*定义各功能菜单的结构体*/

pcx="stusys4.pcx"

Set_Video_Mode(VGA256)/*转换屏幕到320*200*256色*/

PCX_Load_Screen(pcx,1)/*读取封面图象stusys4.pcx*/

Driver=DETECT,Mode=0

initgraph(&Driver,&Mode,"")/*设置图象模式*/

cleardevice()

main_frame(BLUE,LIGHTGRAY)/*绘制主框架图,底色为蓝色*/

/*绘制菜单*/

for(i=0i<MAX_BARi++)

{

setcolor(BLUE)

rectangle(stu_bar[i].start_x, stu_bar[i].start_y, stu_bar[i].start_x+stu_bar[i].length_x, stu_bar[i].start_y+stu_bar[i].length_y)

puthz16(stu_bar[i].start_x+8,stu_bar[i].start_y+5,-8,BLUE,stu_bar[i].p_father)

}puthz16(stu_bar[0].start_x+8,stu_bar[0].start_y+5,-8,WHITE,stu_bar[0].p_father)

old_bar=0curr_bar=0

/*读取按键字符,如为ESC则退出*/

while((key=specialkey())!=ESC){

old_bar=curr_bar

if(sonbar_out==1)sonbar_out=0

if(key==LEFT){

if(curr_bar==0)curr_bar=3

else curr_bar=curr_bar-1

}/*LEFT finished*/

if(key==RIGHT){

if(curr_bar==3)curr_bar=0

else curr_bar=curr_bar+1

}/*RIGHT finished*/

/*如按键为ENTER,则绘制子菜单*/

if(key==ENTER){

save_startx=stu_bar[curr_bar].start_x

save_starty=stu_bar[curr_bar].start_y+stu_bar[curr_bar].length_y+1

save_endx=stu_bar[curr_bar].start_x+stu_bar[curr_bar].length_x

/*保存子菜单展开后掩盖住的图象*/ save_endy=stu_bar[curr_bar].start_y+stu_bar[curr_bar].length_y+stu_bar[curr_bar].num_son*stu_bar[curr_bar].length_y+1

size=imagesize(save_startx,save_starty,save_endx,save_endy)

if(size!=-1)

{

buf=malloc(size)

if(buf)getimage(save_startx,save_starty,save_endx,save_endy,buf)

else {printf("OUT MEMORY")exit(0)}

}

setviewport(save_startx,save_starty,save_endx,save_endy,1)

setcolor(WHITE)

clearviewport()

for(i=1i<=stu_bar[curr_bar].num_soni++)

{

rectangle(0,0,stu_bar[curr_bar].length_x,i*stu_bar[curr_bar].length_y)

setfillstyle(SOLID_FILL,LIGHTGRAY)

floodfill(stu_bar[curr_bar].length_x-1,i*stu_bar[curr_bar].length_y-1,WHITE)

}

for(i=0i<stu_bar[curr_bar].num_soni++)

puthz16(8,i*stu_bar[curr_bar].length_y+5,-8,BLUE,stu_bar[curr_bar].p_son[i])

puthz16(8,5,-8,WHITE,stu_bar[curr_bar].p_son[0])

old_sonbar=0curr_sonbar=0

if(stu_bar[curr_bar].num_son)

while(((key_son=specialkey())!=ESC)&&sonbar_out==0){

old_sonbar=curr_sonbar

if(key_son==UP){

if(curr_sonbar==0) curr_sonbar=stu_bar[curr_bar].num_son-1

else curr_sonbar=curr_sonbar-1

}

if(key_son==DOWN){

if(curr_sonbar==(stu_bar[curr_bar].num_son-1)) curr_sonbar=0

else curr_sonbar=curr_sonbar+1

}

puthz16(8,old_sonbar*stu_bar[curr_bar].length_y+5,-8,BLUE,stu_bar[curr_bar].p_son[old_sonbar])

puthz16(8,curr_sonbar*stu_bar[curr_bar].length_y+5,-8,WHITE,stu_bar[curr_bar].p_son[curr_sonbar])

if(key_son==ENTER){

setviewport(0,0,639,479,1)

putimage(save_startx,save_starty,buf,COPY_PUT)

free(buf)

sonbar_out=1

if(curr_bar==0)

switch(curr_sonbar){

case 0:

fil_open()/*调用stu_sub.c文件中fil_open()函数,打开文件*/

break

case 1:

fil_new()/*调用stu_sub.c文件中fil_new()函数,新建文件*/

break

case 2:

fil_save()/*调用stu_sub.c文件中fil_save()函数,保存文件*/

break

case 3:

sys_exit()/*调用stu_sub.c文件中sys_exit()函数,退出系统*/

}

if(curr_bar==1)

switch(curr_sonbar){

case 0:

dat_add()/*调用stu_sub.c文件中dat_add()函数,添加记录*/

break

case 1:

dat_dele()/*调用stu_sub.c文件中dat_dele()函数,删除记录*/

break

case 2:

dat_mod()/*调用stu_sub.c文件中dat_mod()函数,修改记录*/

break

}

} /*key_son=ENTER finished*/

}/*key_son all finished*/

if(sonbar_out==0){

setviewport(0,0,639,479,1)

putimage(save_startx,save_starty,buf,COPY_PUT)

free(buf)/*还原子菜单掩盖住的图象,并释放子菜单所占用的内存*/

}

/*如果子菜单项为0*/

if(!stu_bar[curr_bar].num_son){

if(curr_bar==2)

fil_prn()/*调用stu_sub.c文件中fil_prn()函数,打印文件*/

if(curr_bar==3)

hel_mess()/*调用stu_sub.c文件中hel_mess()函数,显示帮助信息*/

}

} /*ENTER finished*/

puthz16(stu_bar[old_bar].start_x+8,stu_bar[old_bar].start_y+5,-8,BLUE,stu_bar[old_bar].p_father)

puthz16(stu_bar[curr_bar].start_x+8,stu_bar[curr_bar].start_y+5,-8,WHITE,stu_bar[curr_bar].p_father)

}/*key all finished*/

fcloseall()/*关闭所有文件*/

closegraph()/*关闭图形状态*/

}

自己改改!!!

希望能解决您的问题。

给个参考你:/*编制一个学生成绩管理系统,每个学生信息包括:学号、姓名、C语言、高数和英语成绩。具体功能:(1)创建信息链表并以磁盘文件保存;(2)读取磁盘文件并显示输出所有学生的成绩;(3)按学号或姓名查询成绩;(4)添加成绩记录;(5)修改指定姓名或学号的学生的成绩并可存盘;(6)显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息。以C语言成绩为例*/#include#include#include#include#defineN20typedefstruct{charname[10]intnumfloatcfloatmathfloatenglishfloataver}stu//菜单voidmenu()/*便于 *** 作员使用*/{/*清屏*/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("7.统计\n")printf("8.删除\n")printf("0.退出\n")printf("=======================\n")printf("请选择相应的功能:")}//成绩录入voidinput(){FILE*fpstuxs/*定义一个结构体变量来装从文件中读出来的数据*/if((fp=fopen("student.dat","ab"))==NULL){printf("can'topenfile!\n")exit(0)}printf("\n录入格式:姓名学号C语言高数英语当输入姓名为ps结束录入\n")while(1)/*中间加油break,可使循环中断*/{scanf("%s",xs.name)if(strcmp(xs.name,"ps")==0)break/*判断姓名是否为ps,用字符串判断*/scanf("%d%f%f%f",&xs.num,&xs.c,&xs.math,&xs.english)xs.aver=0/*给平均分变量赋初值*/fwrite(&xs,sizeof(stu),1,fp)//将成绩信息写入文件}fclose(fp)}//计算平均分voidsum(){inti=0,nstuxs[N]FILE*fpif((fp=fopen("student.dat","rb+"))==NULL){printf("can'topenfile!\n")exit(0)}while(!feof(fp))/*文件读入内存,读取指针未到文件尾时返回值为0,读到尾时返回值为1,加!取反后,结束即为0*/{fread(&xs[i],sizeof(stu),1,fp)/*读入结构体变量*/if(feof(fp))break/*上面while循环那个会多读一次因为读到尾时那个0还没返回,这里判断如果以读到文件尾,则直接停止,避免重复输入*/xs[i].aver=(xs[i].c+xs[i].math+xs[i].english)/3i++}n=i/*把i的末尾值给n,用于下面循环写入*/i=0fclose(fp)if((fp=fopen("student.dat","wb"))==NULL){printf("can'topenfile!\n")exit(0)}while(i=0)/*k的位置要位于数组范围之内*/{//插入for(j=lenth-1j>=kj--)xs[j+1]=xs[j]/*一开始j是最大的,往后移一个这样移动避免数据被覆盖*//*循环是只循环这一句的*/xs[k]=s/*将输入的学生信息加入这个k位置*/lenth++/*长度+1*///写回if((fp=fopen("student.dat","wb"))==NULL){printf("不能建立文件!!\n")exit(0)}for(i=0i=60&&s[i].c=80&&s[i].c=90){p4[m++]=&s[i++]continue}}printf("不及格:姓名学号C语言\n")for(n=0nname,p1[n]->num,p1[n]->c)}printf("60-79:姓名学号C语言\n")for(p=0pname,p2[p]->num,p2[p]->c)}printf("80-89:姓名学号C语言\n")for(q=0qname,p3[q]->num,p3[q]->c)}printf("90以上:姓名学号C语言\n")for(r=0rname,p4[r]->num,p4[r]->c)}fclose(fp)getch()}//删除:输入学生姓名,若该学生存在,则删除,并显示删除后余下的学生成绩信息voiddele(){stuxs[N]FILE*fpcharname[10]inti=0,len,k=-1/*k=0)/*k>0说明找到删除学生位置*/{if((fp=fopen("student.dat","wb+"))==NULL){printf("can'topenfile!\n")exit(0)}for(i=0i


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11566162.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存