课程设计————学生信息管理系统二(包含历代思路和代码)
来源:互联网 发布:mac版utorrent 编辑:程序博客网 时间:2024/06/03 13:15
课程设计————学生管理系统二(包含历代思路和代码)
一.前言
学生信息管理系统是我第一个独立完成的比较长的代码,也算是花费了一些心血,这个系统是我一点点把它从几百行的代码逐渐优化到上千行,功能从简单到复杂。在这里我把我的思路分享给大家,希望能给大家带来一些帮助。
相比较上一篇博客(学生管理系统)而言,这一篇,主要讲的是我逐步优化的思路和过程。以及在那篇博客后,继续进行的优化。
二.学生管理系统1.0版
1. 实现功能
- 简单的密码验证
- 学生信息的录入(链表的创建)
- 学生信息的增.删.改.查
- 按照平均分排序输出
2. 函数框架
int main(void){ int a; struct student *pHead; show1(); while(1) { system("cls");//清屏 show2();//界面 fflush(stdin); scanf("%d",&a); switch(a) { case 1:pHead=input();break;//输入 case 2:output(pHead);break;//输出 case 3:increase(pHead);break;//增加 case 4:strike_out(pHead);break;//删除 case 5:chang(pHead);break;//修改 case 6:inquiry(pHead);break;//查询 case 7:sore(pHead);break;//排序 case 0:exit(0);break; default :printf("输入有误请重新输入\n");break; } printf("按任意键进行下一步操作\n"); getch(); }}
3. 函数调用关系图
4. 部分功能函数
- 链表的创建输出和增删改查
这一部分大家可以参考我之前的博客(链表及其简单应用),里面有较详细的说明 - 链表的排序
这一部分在我之前的博客(链表及其简单应用)中也有写到,里面介绍了两种排序,链表的冒泡排序和插入排序。相比较而言,其实插入排序更加简单一点,可能是因为冒泡排序是我接触的第一个排序吧,所以我的代码中几乎都是用冒泡来进行排序的 - 密码的输入显示 *
void show1(){ char cipher[20]={"123456"},a[20],t;//cioher 表示密码 int i,j; printf("欢迎进入学生信息管理系统\n"); for(i=0;i<3;i++) { printf("请输入管理员密码:"); for(j=0;a[j-1]!=13;j++)//输入时回车时,停止录入密码 { a[j]=getch();//getch接受键盘输入字符,不显示到屏幕上 if(a[j]==8&&j>0)//如果输入的是删除键 { printf("\b \b");//用\b和空格覆盖前面的* j-=2;//删除数组中的字符 } else if(j>=0) printf("*"); else //防止删除提示语句 printf(" "); } printf("\n"); a[j-1]='\0'; if(strcmp(cipher,a)==0) return; } printf("三次输入错误!!!退出系统\n"); Sleep(150); exit(1);}
5. 源代码
代码地址
学生信息管理2.0版
这个版中,刚刚学习了文件的相关操作,所以将文件的操作加入到其中。
1. 新增功能
- 从文件中录入数据
- 可以选择多种顺序输出
- 将学生信息保存到文件中
- 使用多文件保存不同功能的函数
2. 函数框架
int main(void){ struct student *pHead; int flag; show1();//登录界面 pHead=startup();//信息的录入 save_3(pHead);//保存到缓存文件中 while(1) { system("cls"); show3(); fflush(stdin); scanf("%d",&flag); switch(flag) { case 1:increase(pHead);break;//增加 case 2:strike_out(pHead);break;//删除 case 3:chang(pHead);break;//修改 case 4:inquiry(pHead);break;//查询 case 5:save_3(pHead); output(pHead); pHead=finput(1);break;//输出 case 6: save_3(pHead); save(pHead); pHead=finput(1);break;//保存 case 0:exit(0);break; default :printf("输入有误请重新输入\n");break; } printf("按任意键进行下一步操作\n"); getch(); } }
3. 函数调用关系图
4. 部分功能函数
- 文件的读
struct student *finput(int a)//文件录入 a控制是否需要输入文件名 { FILE *fp; struct student *pHead=NULL,*pEnd,*pNew; int sum=0,i,j,num; char filename[100]=N; if(a==2) { printf("请输入文件路径及文件名:"); fflush(stdin); gets(filename); } iCound=0; pEnd=pHead=(struct student *)malloc(sizeof(struct student)); fp=fopen(filename,"rt+"); if(fp==NULL) { printf("不能打开文件"); exit(1); } while(1) { sum=0; pNew=(struct student *)malloc(sizeof(struct student)); fscanf(fp,"%s %s %s",pNew->name,pNew->num,pNew->classes); fscanf(fp,"%s %s %s",pNew->score[0],pNew->score[1],pNew->score[2]); for(i=0;i<3;i++)//字符串转换为整数 { num=0; for(j=0;pNew->score[i][j];j++) num=num*10+pNew->score[i][j]-'0'; sum=sum+num; } pNew->aver=sum*1.0/3; if(feof(fp)) break; pEnd->next=pNew; pEnd=pNew; iCound++; } pEnd->next=NULL; fclose(fp); return pHead;}
- 文件的写
void save_3(struct student *pHead){ FILE *fp; char filename[100]= N; fp=fopen(filename,"wt"); if(fp==NULL) { printf("不能打开文件"); exit(1); } pHead=pHead->next; while(pHead) { fprintf(fp,"%s %s %s ",pHead->name,pHead->num,pHead->classes); fprintf(fp,"%s %s %s\n",pHead->score[0],pHead->score[1],pHead->score[2]); pHead=pHead->next; } fclose(fp);}
- 使用参数多次调用排序函数
void output_2(struct student *pHead,int a)//a控制排序依据 //方式2输出 { int i,j,flag; struct student *pj_1,*pj,*pj_h; for(i=0;i<iCound-1;i++) for(j=0,pj=pHead,flag=0;j<iCound-i-1;j++) { if(flag==0) { pj_1=pj; pj=pj->next; pj_h=pj->next; } if(flag==1) { pj_1=pj_1->next; pj_h=pj->next; } flag=0; if(a==2&&(pj->aver)<(pj_h->aver)) { exchange(pj,pj_h,pj_1); flag=1; } else if(a==3&&strcmp(pj->num,pj_h->num)==1) { exchange(pj,pj_h,pj_1); flag=1; } else if(a==4&&strcmp(pj->classes,pj_h->classes)==1) { exchange(pj,pj_h,pj_1); flag=1; } else if(a==5&&strcmp(pj->name,pj_h->name)==1) { exchange(pj,pj_h,pj_1); flag=1; } } output_t(pHead); }
5. 源代码
这个代码中我使用的是cfree创建工程文件的方法
其他编译器不知道是否可以正常运行。
如果要运行查看结果,推荐使用c free
代码地址
学生信息管理3.0版
这个版本具体可以看我的上一篇博客。
1. 新增功能
- 位运算对密码的加密
- 分为三个登录端,学生,教师,管理员
2.源代码
这个代码中我使用的是cfree创建工程文件的方法
其他编译器不知道是否可以正常运行。
如果要运行查看结果,推荐使用c free
代码地址
学生信息管理4.0版
1. 新增功能
- 从管理一个班变为管理五个班
- 对学生信息的数据结构进行改进,将保存成绩从二维数组改为链表,即十字链表。(老师加的要求)
2. 函数框架
3. 函数调用关系图
4. 部分功能函数
- 学生信息结构节点的定义
struct score//分数 { char date[20]; int No; struct score *next;};struct student{ int No; //排名 char name[20];//姓名 char num[20];//学号 char classes[20];//班级 struct score *ScorepHead;//分数 double aver;//平均分 struct student *next;//指针域 }; struct student *StupHead[6]; //5个班的头节点 int iCound[6];//5个班的节点数量
- 学生信息链表的创建(文件读入)
struct student *Finput(char filename[]) { FILE *fp; struct student *pHead=NULL,*pEnd,*pNew; int sum=0,i,j,num; iCound[filename[5]-'0'-1]=0; pEnd=pHead=(struct student *)malloc(sizeof(struct student)); fp=fopen(filename,"rt"); if(fp==NULL) { printf("不能打开文件"); exit(1); } char a[20];//暂存信息 fscanf(fp,"%s",a); int temp[Classnum]={0};//暂存科目数量 while(!feof(fp)) { sum=0; pNew=(struct student *)malloc(sizeof(struct student)); strcpy(pNew->name,a); fscanf(fp,"%s %s",pNew->num,pNew->classes); struct score *spEnd,*spNew,*spt; //录入科目成绩 pNew->ScorepHead=spEnd=(struct score *)malloc(sizeof(struct score)); while(1) { spNew=(struct score *)malloc(sizeof(struct score)); fscanf(fp,"%s",a); if(a[0]<'0'||a[0]>'9'||feof(fp)) break; strcpy(spNew->date,a); spEnd->next=spNew; spEnd=spNew; } spEnd->next=NULL; int k; for(k=0,spt=pNew->ScorepHead->next;spt!=NULL;spt=spt->next,k++)//字符串转整数 { for(j=0,num=0;spt->date[j];j++) num=num*10+spt->date[j]-'0'; sum=sum+num; temp[k]++; } pNew->aver=sum/k; iCound[filename[5]-'0'-1]++; pEnd->next=pNew; pEnd=pNew; } for(i=0;i<Classnum;i++) subject[filename[5]-'0'-1][i]=temp[i]; pEnd->next=NULL; fclose(fp); return pHead;}
5. 源代码
这个代码中我使用的是cfree创建工程文件的方法
其他编译器不知道是否可以正常运行。
如果要运行查看结果,推荐使用c free
代码地址
后续可以进行的优化
1.梳理函数调用关系,让代码更加清晰简洁
2.使用MFc或者Esay_x制作图形化界面。
阅读全文
0 0
- 课程设计————学生信息管理系统二(包含历代思路和代码)
- 课程设计——学生信息管理系统
- 数据结构课程设计——学生信息管理系统
- 课程设计——学生信息管理系统
- 数据结构课程设计——学生信息管理系统
- 数据结构课程设计——学生信息管理系统
- 数据结构课程设计——学生信息管理系统
- 数据结构课程设计—学生信息管理系统
- 课程设计——学生信息管理系统(顺序表 链表)
- 课程设计————学生信息管理系统
- 课程设计~学生信息管理系统代码
- 课程设计—图书信息管理系统
- C语言课程设计——学生信息管理系统(BUG挺多,敬请指正)
- 学生信息管理系统——常见问题(二)
- 学生信息管理系统—总结
- 处女作—学生信息管理系统
- 学生信息管理系统—总结
- 实训—学生信息管理系统
- UVA
- spring framework 各版本源码下载地址
- Perl之单行命令特技
- poj1251
- Android客户端之“微服私访”App的系统学习(三)基于 OkHttp和Gson 快速获取解析服务数据
- 课程设计————学生信息管理系统二(包含历代思路和代码)
- js 获取map对象的key,value
- js的function为什么不能执行?
- 03_利用cryptopp写hmacsha256算法
- 汉语转换拼音类
- softmax的多分类
- 闲聊几句
- Maven引入本地Jar包并打包进War包中
- android颜色选择器