C语言学生信息管理系统项目.docx
- 文档编号:8900039
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:78
- 大小:31.60KB
C语言学生信息管理系统项目.docx
《C语言学生信息管理系统项目.docx》由会员分享,可在线阅读,更多相关《C语言学生信息管理系统项目.docx(78页珍藏版)》请在冰豆网上搜索。
C语言学生信息管理系统项目
C语言学生信息管理系统项目
学生信息管理系统项目说明文档
一、项目概述
1(1、产品描述
开发意图:
为了使档案管理工作更方便,利用计算机提高工作人员的工作效率,减轻工
作负担,实现档案管理的无纸化。
应用目标:
通过使用本系统软件,帮助最终用户利用计算机,快速方便的对学生学籍管
理进行管理、输入、输出、查找、删除的所需操作,使散乱的人事档案能够具体化,直观化、
合理化。
作用及范围:
本软件适用与教育界。
1(2、产品功能
软件功能表
模块功能说明
一般功能登录
主菜单
退出
学生记录管理学生信息录入
学生记录的排序
学生记录查询和删除
学生信息打印
统计报表分数统计报表
文件管理记录保存功能
记录另保为功能
记录读取功能
1(2、编写环境
Linux操作系统gcc编译器EditPlus编辑器
二、功能概述
1(1、功能分块
开始
主菜单
另添排打保读查统退存
加序印存取询计出为
是否退出
结束
1(2、主菜单
开始
输出菜单
输入菜单选项Menu显示错误信息
0<=Menu<=8是否Menu=1否
Menu=2否
Menu=3否
Menu=4否
Menu=5否
Menu=6否是
是是Menu=7否
是是Menu=8否是
Menu=0是
是排列另存为文件加载
是
信息添加打印直接保存查询信息统计退出
结束
1(3、登陆
开始
输出登录界面输出提示信输出提示信输入用户名息息User否
User超过10个User是否正确否是字符或者为空
是
否
输出提示信输入密码息PassWord
PassWord超过6个字符或者为是是否输入错误退出系统空三次
否
PassWord是否否正确
是
进入系统
结束
1(4、添加
开始
获得信息总数CountB
计算新学生学号为Count>=100是Count+1
提示数据已满输出各项信息
返回主菜单
输入姓名
提示出错A姓名是否符合规范
是
输入生日
提示出错
生日格式是否符合规范并且否7<=年龄<=30
是
如有多项成绩,同此方法
输入成绩
提示出错
0<=成绩<100否
是
提示录入成功,是否要Count=Count+1继续录入(Y/N)
A输入X
X==YB结束返回主菜单是
1(5、排序
开始
否是否有记录
是
输出排序菜提示信息单
输入菜单Menu提示出错
0<=Menu<=4否
是
Menu==0Menu==1Menu==2Menu==3Menu==4否否否否
是是是是
学号升排序学号降排序总分升排序总分降排序
提示排序成功
返回主菜单
结束
1(6、打印
开始
计算总页数Max
输出列标题和各项控制信息
定义页码Pag==1
输出第PagA页的信息
输入控制信否息
输入是否正确
是
=第一页否=上一页否=下一页否=最后页否=第N页是是
Pag-1>01<=N<=MaxPag=1Pag+1 否Pag=Pag-1Pag=1Pag=Pag+1Pag=MaxPag=N A否=退出 是 结束 1(7、另存为 开始 输入文 件名显示出 错 文件名是否合文件是否存在是否法 是 否 是否覆盖是否保存 是 是保存文件 结束 1(8、保存 开始 是否保存到默 认文件 是 保存文件否 结束 1(9、读取 开始 是否有记录未保存 提示是否保存到默认文件提示读取默认文件还是自定义文件 否输入Y/N 从默认文件读输入文件名取 是输入正确是否 文件名是否正确 读取默认文件 是否=Y 文件是否存在是 是保存到默认 文件 读取自定义文件 结束 1(10、查询 开始 提示没有记否是否有记录录 是 输入查询方 式,学号or 姓名 输入姓名,输入学号是按学号查询可模糊打印记录打印记录是否有记录是否有记录 是是是否要删除输入学号是是否要删除 是 学号在搜索列提示不在搜删除记录表中索列表中 是 提示删除成删除记录 功 结束 1(11、统计 开始 输入0<=menu<=7 Menu==13<=Menu<=5Menu==2Menu==0否否 是是是是按总分降序,搜索按第i科分数降序,打印各科平均分返回主界面前三名搜索前三名 打印搜索列表 1(12、退出 开始 是否有文件未是否确认退否保存出(Y/N) 是 提示是否保否输入I存(Y/N) 输入XI==Y||I==N 是 X==YI==Y是否 否 X==N保存否 退出返回主菜单退出返回主菜单 结束 另附源代码: #include #include #include #defineUser10//用户名最大宽度#definePassword10//密码最大宽度#defineHight24//控制台高度#defineWidth80//控制台宽度#defineDefaultUser"admin"//默认的用户名#defineDefaultPassword"123456"//默认的用户密码#defineStudentName20//学生姓名最大长度#defineOnePageNum8//一页显示信息条数#defineMARKLEN(Width-2-StudentName-8)/8//除学号和姓名外其他项目所占长度 #defineFILEADDR"data.txt"//默认文件名#defineFILE_NAME_NUM8//文件名长度 intWrongTimes=3;//允许登录输错密码次数intIsSaved=0;//记录是否保存,0为已保存intstudent_num=0;//学生实际人数 intmaxnum=0;//最大学号 intsys_year=0;//系统时间年 intsys_mon=0;//系统时间月 intsys_day=0;//系统时间日 typedefstructdel_node//存放缺漏的学号 { intSno; structdel_node*next;}del_Node,*del_list,*del_pointer; typedefstructdate_node{ intYear;//年 intMonth;//月 intDay;//日 }m_date; typedefstructstudent_node{ intSno;//学号 charName[20];//姓名 m_datebirthday;//生日 floatscore[5];//五门成绩: 语文,数学,英语,物理,化学}student_info; typedefstructnode//学生信息的数据结构{ student_infodata; structnode*next;//指向下一结点 }Node,*lklist,*pointer; pointerp=NULL,q;//p为尾巴结点,用于添加q用于其他lklisthead=NULL;//学生数据头结点 del_listdel_head=NULL;//缺漏学号链表头结点del_pointerdel_last=NULL;//缺漏学号链表尾结点 /************************功能: 添加新的结点到链表中 参数: lklisthead,链表头结点 lklist*last,链表尾结点指针 其他,学生结点信息 返回: 链表头结点 ************************/lklistadd(lklisthead,lklist*last,student_infodata) { if(head==NULL)//如果链表为空 { head=(Node*)malloc(sizeof(Node)); *last=head; head->data.Sno=0; head->next=NULL; } q=(Node*)malloc(sizeof(Node)); q->data=data; if(q->data.Sno>maxnum) maxnum=q->data.Sno;//记录最大学号 (*last)->next=q; *last=q; (*last)->next=NULL; returnhead; } /************************功能: 添加缺漏的学号 参数: lklisthead,链表头结点 lklist*last,链表尾结点指针 intsno学号 返回: 链表头结点 ************************/del_listadd_del_sno(del_listhead,del_list*last,intsno) { del_pointerx; if(head==NULL)//如果链表为空 { head=(del_Node*)malloc(sizeof(del_Node)); head->Sno=0; *last=head; head->next=NULL; } x=(del_Node*)malloc(sizeof(del_Node)); x->Sno=sno; head->Sno=head->Sno+1; (*last)->next=x; *last=x; (*last)->next=NULL; returnhead; } /************************功能: 清空链表结点 参数: lklisthead,链表头结点 lklist*last,链表尾结点指针 返回: 无 ************************/voiddel(lklisthead,lklist*last) { if(head==NULL||head->next==NULL) return; while(head->next) { q=head->next; head->next=q->next; free(q); } *last=head; } /************************功能: 清空缺漏学号链表结点 参数: lklisthead,链表头结点 lklist*last,链表尾结点指针 返回: 无 ************************/voiddel_del(del_listhead,del_list*last) { del_pointerx; if(head==NULL||head->next==NULL) return; while(head->next) { x=head->next; head->next=x->next; free(x); } *last=head; } /************************功能: 删除缺漏学号链表第一个结点 参数: lklisthead,链表头结点 lklist*last,链表尾结点指针 返回: 链表 ************************/del_listdel_del_first(del_listhead,del_list*last) { if(head==NULL||head->next==NULL) return; del_pointerx=head->next; if(x->next) { head->next=x->next; } else { *last=head; head->next=NULL; } free(x); head->Sno=head->Sno-1; returnhead; } /************************功能: 复制链表 参数: lklisthead,要复制的链表 lklist*copy_head,存放的头指针 lklist*copy_last,存放的尾指针 返回: 无 ************************/voidcopy_link(lklisthead,lklist*copy_head,lklist*copy_last) { pointerx; if(head==NULL||head->next==NULL) return; x=head; while(x->next) { *copy_head=add(*copy_head,copy_last,x->next->data); x=x->next; } } /************************功能: 从输入流读取一个字符 返回: 返回该字符的ASCII码 ************************/intgetch(void) { structtermiostm,tm_oid; intfd=STDIN_FILENO,c; if(tcgetattr(fd,&tm)<0) return-1; tm_oid=tm; cfmakeraw(&tm); if(tcsetattr(fd,TCSANOW,&tm)<0) return-1; c=fgetc(stdin); if(tcsetattr(fd,TCSANOW,&tm_oid)<0) return-1; returnc; } /************************功能: 从输入流读取一个字符 返回: 返回该字符的ASCII码 ************************/intmy_getch(){ inti=0; intj=0; do { i=getch(); if(i==27) { j=i; continue; } elseif(i==91) { j=i; continue; } elseif((i==65||i==66||i==67||i==68)&&j! =0) { break; } elseif((i==49||i==50||i==51||i==52||i==53||i==54)&&j! =0) { i=i-55;//为了防止和数字键的ASCII码重复,减去55 j=getch(); break; } elsebreak; } while (1); returni; } /************************ 功能: 光标移动 参数: y,第几行;x,第几列 返回: 无 ************************/voidset_cursor(inty,intx){ charyxstr[30]; sprintf(yxstr,"echo-ne\"\\33[%d;%dH\"",y,x); system(yxstr); } /************************************* 功能: 输入函数 参数: charstr[],存放输入的内容; intmax,输入的最大个数 intx,inty,输入的坐标 intsign,0为正常输入,1为密码输入,2为数字输入返回: 无 **************************************/ voidinput(charstr[],intmax,intx,inty,intsign) { intcount=0;//记录当前有效字符个数 inta=0;//获取ascii值 inti=0; set_cursor(x,y); do { a=my_getch(); if(a! =13&&a! =127&&count { if(sign==2) { if(a>='0'&&a<='9') { str[count]=a; printf("%c",a); fflush(stdout); count++; } } else { str[count]=a; if(sign==0) printf("%c",a); elseprintf("*"); fflush(stdout); count++; } } elseif(a==127) { count--; if(count<0) { count=0; set_cursor(x,y); } else { printf("\b\b"); fflush(stdout); } } elseif(a==13&&count>=1) { str[count]='\0'; break; } } while (1); } /************************************* 功能: 获取系统时间 参数: 无 返回: 无 **************************************/ voidget_sys_date(){ time_ttimep; structtm*p; time(&timep); p=gmtime(&timep); sys_year=1900+p->tm_year; sys_mon=1+p->tm_mon; sys_day=p->tm_mday;} /************************************* 功能: 打印文字 参数: intx,行 inty,列 charstr[],文字内容 返回: 无 **************************************/ voidprint_words(intx,inty,charstr[]) { set_cursor(x,y); printf("%s",str); fflush(stdout); } /************************************* 功能: 打印边框 参数: introw,边框起始行坐标 inth,边框高度 返回: 无 **************************************/ voidprint_border(introw,inth){ inti=0; print_words(row,1,"? "); for(i=3;i { printf("="); fflush(stdout); } printf("? "); fflush(stdout); for(i=1;i { print_words(row+i,1,"? "); print_words(row+i,Width-1,"? "); } print_words(row+h-1,1,"? "); for(i=3;i { printf("="); fflush(stdout); } printf("ByZH%04d-%02d-%02d",sys_year,sys_mon,sys_day); fflush(stdout); printf("===? "); fflush(stdout); //打印信息框 print_words(row+h-4,(Width-10)/2,"MessageBox"); set_cursor(row+h-4,3); for(i=2;i<(Width-10)/2-1;i++) { printf("="); fflush(stdout); } set_cursor(row+h-4,(Width-10)/2+10); for(i=0;i<(Width-10)/2-1;i++) { printf("="); fflush(stdout); } } /************************************* 功能: 打印标题头 参数: char*s_title,标题内容 introw,标题头起始行坐标 返回: 无 **************************************/ voidprint_title_head(char*s_title,introw) { intlen=strlen(s_title)+2; intcol=(Width-len)/2;//计算居中位置 inti=0; set_cursor(row,col+1); for(i=0;i { printf("*"); fflush(stdout); } set_cursor(row+1,col+1); printf("*%s*",s_title); fflush(stdout); set_cursor(row+2,col+1); for(i=0;i { printf("*"); fflush(stdout); } } /*************************************功能: 清空 参数: intx,清空的行坐标 inty,清空的列坐标 intn,清空长度 返回: 无 ***********
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学生 信息管理 系统 项目