学生信息管理系统.docx
- 文档编号:10760604
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:24
- 大小:60.84KB
学生信息管理系统.docx
《学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统.docx(24页珍藏版)》请在冰豆网上搜索。
学生信息管理系统
学生信息管理系统
2源代码
#include
#include
#include
#include
#include
#include
#defineESC27//退出键值
#defineENTER13//回车键值
#defineBREAKSPACE0x20//空格键值
#defineHOME0x47/*71*///HOME键值
#defineEND0x4f/*79*///END键值
#definePAGEUP73/*0x49*///PAGEUP键值
#definePAGEDOWN81/*0x51*///PAGEDOWN键值
#defineF159/*0x3b*///F1键值
#defineF260/*0x3c*///F2键值
//初始化化数据函数
voidcreate();
//查找
voidcheck();
//删除
voiddeletew();
//写入文件
voidwrite();
//追加
voidinsert();
//显示
voiddisplay();
//修改
voidcorrect();
//主菜单
voidshow();
//按学号进行排序
voidrow();
//定义结构体
structstudent
{
intnum;
charname[20];
}student[500];
//学生人数,为全局变量
intlength;
/*创建学生信息*/
voidcreate()
{
inti=0;
charinput1,m;//input1,m用来接收键入要求
FILE*fp;//定义文件指针
printf("\n\t\t查询文件是否已有数据?
\ESCorENTER");
input1=getch();//getch()函数用于专门接收特殊键码的ASCII值的函数,比如ESC,ENTER等
if(input1==ESC)//输入数据,而不查询文件
{
printf("\n\t\t输入人数:
");
scanf("%d",&length);
printf("\t\t输入中------》》》》\n姓名:
学号:
\n\t\t");
for(;i { scanf("%s",student[i].name); getchar();//此处可有可无,只为接收回车换行输入 scanf("%d",&student[i].num); } length=i; printf("\n正在保存输入数据----"); write();//用于数据的文件保存 } //查询文件是否有数据? if(input1==ENTER) { if((fp=fopen("studentfile.txt","rb"))==NULL)//以只读写方式打开已有文件 { printf("\n打开文件发生错误! \n"); exit(0); } for(i=0;! feof(fp);i++)//feop()函数用于判断文件指针是否指向文件末尾,是返回0,否,返回1 fscanf(fp,"%s%d\r\n",student[i].name,&student[i].num);//格式化读文件的函数fscanf length=i; fclose(fp); system("cls");//dos自带的清屏函数 printf("\n\n\t\t查询成功---是否显示? [ESCorENTER]"); m=getch();//接收 if(m==ESC)return;//退出,即返回main()函数处 if(m==ENTER) { system("cls"); printf("\n\n\n\n\t\t"); display();//显示数据 } getchar();//接收换行输入 } elsereturn;//否则返回 } /*信息查询*/ voidcheck() { inti; charname1[20]; intinput2,input21,input22;//三个接收键值 intnum1; system("cls"); printf("\n\t\t输入查询方式: \n\t\t1: 姓名\n\t\t2: 学号\n\t\t"); scanf("%d",&input2);//多分支选择语句 if(input2==1)//姓名查询 { printf("\t\t输入姓名: "); scanf("%s",name1); for(i=0;i { if(strcmp(student[i].name,name1)==0)//strcmp()头文件#include { printf("\n\t\t查询成功! "); getchar();//接收回车 printf("\n\t\t%s学生学号为: %d",name1,student[i].num); getchar(); break; } } if(i>=length)//若跳出循环且没有查到 { printf("\n\t\t查无,是否追加信息? ESCorENTER"); input21=getch(); if(input21==ESC)return; if(input21==ENTER)insert(); } } if(input2==2)//输入学号查询 { printf("\t\t输入学号: "); scanf("%d",&num1); for(i=0;i { if(student[i].num==num1) { printf("\n\t\t查询成功! "); getchar(); printf("\n\t\t%d学号学生为: %s",num1,student[i].name); getchar(); break; } } if(i>=length) { printf("\n\t\t查无,是否追加信息? ESCorENTER"); input22=getch(); if(input22==ESC)return; if(input22==ENTER)insert(); } } } /*信息删除*/ voiddeletew() { intnum2; inti,j,m; charinput3,input4; charname3[20]; chardata[20]; printf("\n\t\t输入要删除的学号或姓名: ");//可输入字符或者数字 gets(data); m=strlen(data);//头文件为 if(isdigit(data[0]))//调用isdigit()函数判断输入的第一个字符是否是数字,为真,则是数字 { num2=data[m-1]-48;//用于将最后一个数字去ASCII值"0"的码值为48 for(i=1;i { num2+=(data[m-1-i]-'0')*pow(10,i);//计算字符接收对应的实际十进制数值,num2为其输入学号 } for(i=0;i { if(num2==student[i].num) { printf("\n\t\t-----学号: %d姓名: %s\n\t\t是否删除? \[ESCorENTER]",num2,student[i].name); input3=getch(); if(input3==27)return; if(input3==13) { student[i]=student[i+1];//找到,删除方式为其后一位数据取代该位的位置 length--;//数据自减2位 printf("\n\t\t已删除-----"); getchar(); } break; } } if(i==length)//跳出循环而查无结果,显示无记录 { printf("\n\t\t无该学号记录! ---"); getchar(); return; } } elseif(! strcmp(data,"\0"))return;//若输入为空,大概为回车键或空格键,则也返回主函数 else//否则输入为姓名 { for(i=0;i { if(! strcmp(data,student[i].name))//判断输入姓名是否有记录 { printf("\n\t\t学号: %d姓名: %s\n\t\t是否删除? \[ESCorENTER]",student[i].num,data); input4=getch(); if(input4==27)return; if(input4==13) { student[i]=student[i+1];//删除中 length--; printf("\n\t\t已删除-----"); getchar(); } break;//查找成功,必须用break跳出循环 } } if(i==length)//无果 { printf("\n\t\t无该学号记录! ---"); getchar(); return; } } row();//将数据重新按学号先后排序 write();//排序结果保存入文件 } voidcorrect()//信息更改 { intnum3; inti,n; charname4[20]; chardata1[20]; intinput8,input9,input10,input11,input12; printf("\n\t\t信息更改过程中——\n\t\t输入学生姓名或学号\n\t\t"); gets(data1); n=strlen(data1);//获得输入的长度 if(isdigit(data1[0]))//调用isdigit()函数判断输入的第一个字符是否是数字 { num3=data1[n-1]-48; for(i=1;i { num3+=(data1[n-1-i]-'0')*pow(10,i);//同上 } for(i=0;i { if(num3==student[i].num) { system("cls");//清屏 printf("\n\n\n\t\t显示该生信息: \n\t\t-----学号: %d姓名: %s\n\t\t是否更改? [ESCorENTER]",num3,student[i].name); input9=getch(); if(input9==ESC)return; if(input9==ENTER) { printf("\n\t\t---提示: \n\t\t1.输入姓名\n\t\t2.输入学号\n\t\t3.同步更改\n\t\t4.退出"); scanf("%d",&input10); switch(input10) { case1: {printf("\t\t请输入姓名: ");scanf("%s",student[i].name);}break;//只输入姓名 case2: {printf("\t\t请输入学号: ");scanf("%d",&student[i].num);}break;//只输入学号 case3: {printf("\t\t请输入姓名: 学号: \n\tt\t");scanf("%s",student[i].name);getchar();scanf("%d",&student[i].num);}break;//输入姓名和学号 case4: default: return;//退出 } printf("\n\t\t已更改-----"); getchar(); getchar(); } break;//跳出循环 } } if(i==length)//查无 { printf("\n\t\t无该学号记录! ---"); getchar(); return; } } elseif(! strcmp(data1,"\0"))return;//输入为空,返回 else//输入为学生姓名 { for(i=0;i { if(! strcmp(data1,student[i].name))//匹配成功 { system("cls");//清屏 printf("\n\n\n\t\t显示该生信息: \n\t\t-----学号: %d姓名: %s\n\t\t是否更改? [ESCorENTER]",student[i].num,data1); input11=getch(); if(input11==ESC)return; if(input11==ENTER) { printf("\n\t\t---提示: \n\t\t1.输入姓名\n\t\t2.输入学号\n\t\t3.同步更改\n\t\t4.退出"); scanf("%d",&input12); switch(input12) { case1: printf("\t\t请输入姓名: ");scanf("%s",student[i].name);break;//更改姓名 case2: printf("\t\t请输入学号: ");scanf("%d",&student[i].num);break;//更改学号 caseENTER: {printf("\t\t请输入姓名: 学号: ");scanf("%s",student[i].name);getchar();scanf("%d",&student[i].num);}break;//同时更改 case4: //退出 default: return; } printf("\n\t\t已更改-----"); getchar(); getchar(); } break;//找到则跳出 } } if(i==length)//查无 { printf("\n\t\t无该学号记录! ---"); getchar(); return; } } row();//学生学号排序 write();//重新保存 } voidinsert()//信息追加 { intnum3; charname4[20]; intinput5; printf("\n\t\t追加学生信息中——\n\t\t[ESC? ]输入学生姓名: 学号: \n\t\t"); input5=getch(); if(input5==ESC)return; else { scanf("%s",student[length].name); getchar(); scanf("%d",&student[length].num); length++; row();//排序 printf("\n\t\t正在保存输入数据----"); getchar(); getchar(); write();//保存 } } voidrow()//学号排序 { structstudenttemp;//用结构体来转存 inti,j; charname6[20]; intnum6;//冒泡排序法 for(i=0;i for(j=0;j { if(student[j].num>student[j+1].num) { temp=student[j]; student[j]=student[j+1]; student[j+1]=temp; } } write();//写入文件 } /*文件写入*/ voidwrite() { inti; FILE*fp; if((fp=fopen("studentfile.txt","wb"))==NULL) { printf("\n\n\t\t打开文件发生错误! \n"); exit(0); } for(i=0;i fprintf(fp,"%s%d\r\t",student[i].name,student[i].num); fclose(fp); } /*显示*/ voiddisplay() { inti; system("cls"); printf("\n\n\n\t\t姓名学号\n"); for(i=0;i { printf("\n\t\t%s%d\n",student[i].name,student[i].num); } system("PAUSE");//dos函数的自带 } //主菜单显示 voidshow() { system("cls");//清屏 system("color13");//定义windows.h头文件下的界面输出 printf("\n\n\n\n\t\t=·=·=·=·=·=学生信息管理系统·=·=·=·=·=\n"); printf("\t\t---------------------------------------------------\n"); printf("\t\t|F1: 导入信息|\n"); printf("\t\t|F2: 显示学生资料|\n"); printf("\t\t|PAGEUP: 查找学生资料|\n"); printf("\t\t|PAGEDOWN: 修改学生资料|\n"); printf("\t\t|HOME: 追加学生资料|\n"); printf("\t\t|END: 删除学生资料|\n"); printf("\t\t|BREAKSPACE: 保存学生资料|\n"); printf("\t\t|ESC: 退出系统|\n"); printf("\t\t----------------------------------------------------\n"); printf("\t\t请选择相应的功能键: "); } /*主程序*/ voidmain() { charmm; show(); while (1) { mm=getch(); switch(mm) { caseF1: create(); show(); break; caseF2: display(); show(); break; casePAGEUP: check(); show(); break; casePAGEDOWN: correct(); show(); break; caseHOME: insert(); show(); break; caseEND: deletew(); show(); break; caseBREAKSPACE: write(); show(); break; caseESC: exit(0); } } } 截图: F1键下: ENTER回车: ENTER回车: 或者主界面按F2 PAGEUP; 1 2 PAGEDOWN: HOME: END: BREAKSPACE+F2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 信息管理 系统