1. 首页 > 手机 >

基于数据结构管理系统题目 数据结构在管理系统中的应用

关于基于数据结构管理系统题目,数据结构在管理系统中的应用这个很多人还不知道,今天小爱来为大家解答以上的问题,现在让我们一起来看看吧!

基于数据结构管理系统题目 数据结构在管理系统中的应用基于数据结构管理系统题目 数据结构在管理系统中的应用


基于数据结构管理系统题目 数据结构在管理系统中的应用


1、头文件:student.h#ifndef H_STUDENT_HH#define H_STUDENT_HH#include#include#include#include#define INITIAL_SIZE 100#define INCR_SIZE 50#define NUM_SUBJECT 5struct student_{char number[15];char name[20];char gender[4];float score[NUM_SUBJECT];float sum;float erage;int index;};typedef struct student_ StuInfo;extern int numStus;extern StuInfo records;extern char sedTag;extern int arraySize;extern char subject[];void handle_menu(void);int menu_select(void);void addRecord(void);void modifyRecord(void);void display(void);void queryInfo(void);void removeRecord(void);void sortInfo(void);int seRecords(void);int loadRecords(void);void newRecords(void);void quit(void);void showTable(void);int findRecord(char target,int targetType,int from);int getIndex(float sum);void copyRecord(StuInfo src,StuInfo dest);#endif // H_STUDENT_HH各个文件:主界面student.c#include "student.h"int numStus=0;StuInfo records=NULL;char sedTag=0;int arraySize;char subject[]={"语文","数学","英语","物理","化学"};int main(){records=(StuInfo)malloc(sizeof(StuInfo)INITIAL_SIZE);if(records==NULL){printf("momory fail!");exit(-1);}arraySize=INITIAL_SIZE;printf("\n");printf("\t\n");printf("\t 这是一个 \n");printf("\t 学生成绩管理程序 \n");printf("\t 可以多学生成绩进行管理 \n");printf("\t 欢迎使用管理程序 \n");printf("\t\n");printf("\n");handle_menu();}void handle_menu(void){for( ; ; ){switch(menu_select()){case 0:addRecord();break;case 1:modifyRecord();break;case 2:display();break;case 3:queryInfo();break;case 4:removeRecord();break;case 5:sortInfo();break;case 6:seRecords();break;case 7:loadRecords();break;case 8:newRecords();break;case 9:quit();}}}int menu_select(){char s[2];int cn=0;printf("\n");printf("\t0. 增加学生信息\n");printf("\t1. 修改学生信息\n");printf("\t2. 显示学生信息\n");printf("\t3. 查询学生信息\n");printf("\t4. 删除学生信息\n");printf("\t5. 对学生信息进行排序\n");printf("\t6. 保存学生信息至记录文件\n");printf("\t7. 从记录文件读取学生信息\n");printf("\t8. 新建学生信息文件\n");printf("\t9. 结束运行\n");printf("\n\t左边数字对应功能选择,请选择0-9: ");for(; ;){gets(s);cn=atoi(s);if(cn==0&&(strcmp(s,"0")!=0)) cn=11;if(cn9) printf("\n\t输入错误,重选0-9: ");else break;}return cn;}void newRecords(void){char str[5];if(numStus!=0){if(sedTag==1){printf("现在已经有记录,选择处理已有记录的方法。

2、\n");printf("是否保存原来的记录?(Y/N)");gets(str);if(str[0]!='n'&&str[0]!='N')seRecords();}}numStus=0;addRecord();}void quit(void){char str[5];if(sedTag==1){printf("是否保存原来的记录? (Y/N)");gets(str);if(str[0]!='n'&&str[0]!='N')seRecords();}free(records);exit(0);}排序模块sort.c#include"student.h"void sortInfo(void){char str[5];int i,j;StuInfo tmps;if(numStus==0){printf("没有可供排序的记录!");return;}printf("请输入您希望进行的排序方式:\n");printf("1.按学号进行升序排序\n");printf("2.按学号进行降序排序\n");printf("3.按名称进行升序排序\n");printf("4.按名称进行降序排序\n");printf("5.按名次进行升序排序\n");printf("6.按名次进行降序排序\n");printf("7.按错了,我并不想进行排序\n");gets(str);if(str[0]'6')return;for(i=0;i{for(j=i+1;j{if((str[0]=='1' && strcmp(records[i].number,records[j].number)>0)||(str[0]=='2' && strcmp(records[i].number,records[j].number)(str[0]=='3' && strcmp(records[i].name,records[j].name)>0)||(str[0]=='4' && strcmp(records[i].name,records[j].name)(str[0]=='5' &&records[i].index>records[j].index)||(str[0]=='6' &&records[i].index{copyRecord(&records[i],&tmps);copyRecord(&records[j],&records[i]);copyRecord(&tmps,&records[j]);}}}printf("排序已经完成\n");sedTag=1;}保存数据模块:se_load.c#include "student.h"int seRecords(){FILE fp;char fname[30];if(numStus==0){printf("没有记录可存");return -1;}printf("请输入要存的文件名(直接回车选择文件stu_):");gets(fname);if(strlen(fname)==0)strcpy(fname,"stu_");if((fp=fopen(fname,"wb"))==NULL){printf("不能存入文件!\n");return -1;}printf("\n存文件…\n");fwrite(records,sizeof(StuInfo)numStus,1,fp);fclose(fp);printf("%d条件记录已经存入文件,请继续作。

3、\n",numStus);sedTag = 0;return 0;}int loadRecords(void){FILE fp;char fname[30];char str[5];if(numStus!=0&&sedTag==0){printf("请选择您是要覆盖现有记录(Y),还是将");printf("读取的记录添加到现有记录之后(n)?\n");printf("直接按回车则覆盖现有记录\n");gets(str);if(str[0]=='n'||str[0]=='N'){//将读取的记录添加到现有记录之后sedTag=1;}else{if(sedTag==1){//覆盖现有记录printf("读取文件将会更改原来的记录,");printf("是否保存原来的记录?(Y/n)");gets(str);if(str[0]!='n' && str[0]!='N')seRecords();}numStus=0;}}printf("请输入要读取的文件名(直接按回车选择文件stu_):");gets(fname);if(strlen(fname)==0)strcpy(fname,"stu_");if((fp=fopen(fname,"rb"))==NULL){printf("打不开文件!请重新选接\n");return -1;}printf("\n取文件…\n");while(!feof(fp)){//现在的数组空间不足,需要重新申请空间if(numStus>=arraySize){records=realloc(records,(arraySize+INCR_SIZE)sizeof(StuInfo));if(records==NULL){printf("memory failed!");exit(-1);}arraySize=arraySize+INCR_SIZE;}if(fread(&records[numStus],sizeof(StuInfo),1,fp)!=1)break;//按照addRecord函数的方法,更新名次records[numStus].index=getIndex(records[numStus].sum);numStus++;}fclose(fp);printf("现在共有%d条记录。

4、",numStus);return 0;}查询模块:que_remv_modi.c#include "student.h"int findRecord(char target,int targetType,int from){int i;for (i=from;i{if (( targetType==0&& strcmp(target,records[i].number)==0)||(targetType==1 &&strcmp (target,records[i].name)==0 )||(targetType==2 && atoi(target)==records[i].index))return i;}return -1;}void queryInfo (void){char str[5];char target[20];int type;int count;int i,j;if (numStus==0){printf ("没有可供查询的记录!");return;}while(1){printf ("请输入查询的方式:(直接输入回车则结束查询)\n");printf ("1. 按学号\n");printf ("2.按姓名\n");printf ("3.按名次\n");gets(str);if (strlen(str)==0)break;if (str[0]=='1'){ printf ("请输入欲查询的学生的学号:");gets(target);type=0;}else if (str[0]=='2'){printf("请输入欲查询的学生的姓名:");gets(target);type=1;}else{printf ("请输入欲查询的学生的名次:");gets(target);type=2;}i= findRecord(target,type,0);if(i==1){//打印查询到的学生的成绩showTable();}count = 0;while (i !=-1){count++;printf("%s\t%s\t%s",records[i].number,records[i].name,records[i].gender);for (j=0;jprintf ("\t%.lf",records[i].score[j]);printf ("\t%.lf\t%.lf\t%d\n",records[i].sum,records[i].erage,records[i].index);i = findRecord(target,type,i+1);}if (count==0)printf ("没有符合条件的学生!\n");elseprintf ("一共找到了%d名学生的信息 \n\n",count);}}/删除指定的记录/void removeRecord(void){char str[5];char target[20];int type;int i,j;int tmpi;if(numStus==0){printf("没有可供删除的记录!");return;}while(1){printf("请输入如何找到欲删除的记录的方式;");printf("(直接输入回车则结果移除作)\n");printf("1.按学号\n");printf("2.按姓名\n");printf("3.按名次\n");gets(str);if(strlen(str)==0)break;if(str[0]=='1'){printf("请输入学生的学号;");gets(target);type=0;}else if(str[0]=='2'){printf("请输入学生的姓名");gets(target);type=1;}else{printf("请输入学生的名次;");gets(target);type=2;}i=findRecord(target,type,0);if(i==-1) printf("没有符合条件的学生!\n");while (i!=-1){showTable();printf("%s\t%s\t%s",records[i].number,records[i].name,records[i].gender);for(j=0;jprintf("\t%.1f",records[i].score[j]);printf("\t%.1f\t%.1f\t%d\n",records[i].sum,records[i].erage,records[i].index);printf("确定要删除这个学生的信息吗?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y'){numStus--;tmpi=records[i].index;//将后面的记录前移for(j=i;j{copyRecord(&records[j+1],&records[j]);}//将名次排在被删记录后面的记录名次减1for(j=0;j{if(records[j].index>tmpi)records[j].index--;}}//去下一个符合条件的记录i=findRecord(target,type,i+1);}}sedTag = 1;}/ 将src指向的一条记录给dest指向的记录/void copyRecord(StuInfo src, StuInfo dest){int j;strcpy(dest->number,src->number);strcpy(dest->name,src->name);strcpy(dest->gender,src->gender);for (j=0; j{dest->score[j] = src->score[j];}dest->sum = src->sum;dest->erage = src->erage;dest->index = src->index;}/ 修改指定学生的信息/void modifyRecord(void){char str[5];char target[20];int type;int i,j;int tmpi;float sum,mark;int count=0; // 总分大于sum的人数if(numStus==0){printf("没有可供修改的记录!");return;}while(1) {printf("请输入如何找到欲修改的记录的方式: ");printf(" (直接输入回车则结束移除作) \n");printf("1. 按学号\n ");printf("2. 按姓名\n ");printf("3. 按名次\n ");gets(str);if(strlen(str)==0) break;if(str[0]=='1'){printf("请输入该学生的学号: ");gets(target);type=0;} else if(str[0]=='1'){printf("请输入该学生的姓名: ");gets(target);type=1;} else{printf("请输入该学生的名次: ");gets(target);type=2;}i=findRecord(target,type,0);if(i==-1) printf("没有符合条件的学生! \n");while(i != -1){showTable();printf("%s\t%s\t%s",records[i].number,records[i].name,records[i].gender);for(j=0;jprintf("\t%.1f",records[i].score[j]);printf("\t%.1f\t%.1f\t%d\n",records[i].sum,records[i].erage,records[i].index);printf("确定要修改这个学生的信息吗?(y/n)");gets(str);if (str[0]=='y' || str[0]=='Y'){tmpi=records[i].index;printf("下面请输入该学生的信息: \n");printf("请输入学号: ");gets(records[i].number);printf("请输入姓名: ");gets(records[i].name);printf("请输入性别 (0为女,1为男): ");gets(str);if (str[0]=='0')strcpy(records[i].gender," 女 ");elsestrcpy(records[i].gender," 男 ");sum=0;for(j=0;j{printf("请输入%s成绩: ",subject[j]);gets(str);mark=(float)atof(str);records[i].score[j]=mark;sum+=mark;}records[i].sum=sum;records[i].erage=sum/NUM_SUBJECT;// 将原来名次排被修改记录之后,而其sum小于等于// 修改后记录的sum的记录的名次减1// 将原来名次排在被修改记录之前或相同,而其sum// 大于修改后记录的sum的记录的名次增1count = 0;for (j=0;j{if(j==i) continue;if(records[j].index>tmpi && records[j].sum>sum)records[j].index--;else if(records[j].indexrecords[j].index++;if (records[j].sum>sum)count++;}records[i].index=count+1;}i=findRecord(target,type,i+1);}}sedTag = 1;}增加学生信息模块:add_disp.c#include "student.h"void showTable(void){int j;printf("学号\t姓名\t性别");for(j=0;jprintf("\t%s",subject[j]);printf("\t总分\t平均分\t名次\n");}void display(void){int i,j;if(numStus==0){printf("没有可供显示的记录!");return;}showTable();for(i=0;i{printf("%s\t%s\t%s",records[i].number,records[i].name,records[i].gender);for(j=0;jprintf("\t%.1f",records[i].score[j]);printf("\t%.1f\t%.1f\t%d\n",records[i].sum,records[i].erage,records[i].index);if(i%20==0&&i!=0){printf("输入任一字符后继续...\n");getch();printf("\n");showTable();}}}int getIndex(float sum){int i;int count=0;for(i=0;i{if(records[i].sum{records[i].index++;}else if(records[i].sum>sum){count++;}}return count+1;}void addRecord(void){char str[10];int i,j;float mark,sum;if(numStus==0)printf("原来没有记录,现在建立新表\n");elseprintf("下面在当前表的末尾增加新的信息\n");while(1){printf("你将要添加一组信息,确定吗?(Y/N)");gets(str);if (str[0]=='n' || str[0]=='N')break;if(numStus>=arraySize){records=realloc(records,(arraySize+INCR_SIZE)sizeof(StuInfo));if(records == NULL){printf("memory failed!");exit(-1);}arraySize=arraySize+INCR_SIZE;}printf("请输入学号:");gets(records[numStus].number);printf("请输入姓名:");gets(records[numStus].name);printf("请输入性别(0为女,1为男):");gets(str);if(str[0]=='0')strcpy(records[numStus].gender,"女");elsestrcpy(records[numStus].gender,"男");sum=0;for(j=0;j{printf("请输入%s成绩:",subject[j]);gets(str);mark=(float)atof(str);records[numStus].score[j]=mark;sum+=mark;}records[numStus].sum=sum;records[numStus].erage=sum/NUM_SUBJECT;records[numStus].index=getIndex(sum);numStus++;}printf("现在一共有%d条信息\n",numStus);sedTag=1;}void dispaly(void){int i ,j;if(numStus==0){printf("没有可供显示的记录!");return;}showTable();for(i=0;i{printf("%s\t%s\t%s",records[i].number,records[i].name,records[i].gender);for(j=0;jprintf("\t%.1f\t%.1f\t%d\n",records[i].sum,records[i].erage,records[i].index);if(i%20==0&&i!=0){printf("输入任一字符后继续...\n");getch();printf("\n\n");showTable();}}}可能有帮助。

5、你直接到C/C++贴吧里面去找啊哎,大学生,堕落。

本文到这结束,希望上面文章对大家有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 12345678@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息