数据结构课程设计之学生信息管理系统

来源:互联网 发布:国家保密局 知乎 编辑:程序博客网 时间:2024/05/05 04:41
/***********************************************************   * 版权所有 (C)2016,jiangyankai   * 文件名称: main.c   * 文件标识:无   * 内容摘要:学生信息管理系统  * 其它说明:无   * 当前版本: V1.0  * 作 者:姜延锴   * 完成日期: 2016.12.29   * 修改记录: 1  * 修改日期: 2016.12.29  * 版本号: V1.0   * 修改人: 姜延锴 * 修改内容:创建   **********************************************************/  

代码:main.c

#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <iostream>#include <fstream>#include <string>using namespace std;typedef struct {char name[20];//姓名float score;//成绩int num;//学号}STD;typedef struct student{STD data;struct student *next;}lnode,*linklist;int menu();//主函数int createlist(linklist &L);//建立链表 int listadd(linklist L);//追加int listinsert(linklist L,int i,STD x);//插入int listdelete(linklist L,STD &x);//删除int listlength(linklist L);//长度void printlist(linklist L);//输出int findlist(linklist L,STD &x);//查找成绩int destroylist(linklist &L);//退出int listrank(linklist L);//排序void listsum(linklist L);//合计void listsink(linklist L);//索引void savelist(linklist L);//保存文件void readlist(linklist L);//读入文件void secondlist(linklist L);//拷贝文件void main(){int i,n,t=1;linklist L;STD s;createlist(L);while(t){n=menu();switch(n){case 1:listadd(L);        printf("\n  ****************************************\n");printf("  添加完成,按任意键继续...\n");getch();break;case 2:printf("  请输入需要插入的学生学号、姓名、成绩,空格隔开\n");scanf("%d%s%f",&s.num,s.name,&s.score);printf("  请输入需要插入的位置(1---%d):",listlength(L));scanf("%d",&i);listinsert(L,i,s);        printf("\n  ****************************************\n");printf("  插入完成,按任意键继续...\n");getch();break;case 3:printf("  请输入需要删除的学生学号:");scanf("%d",&s.num);if(!listdelete(L,s)){printf("  没有该学生数据\n");printf("  按任意键继续...\n");getch();break;}printf("  删除的学生数据为:学号:%-5d 姓名:%-10s 成绩:%5.2f\n",s.num,s.name,s.score);printf("\n  ****************************************\n");printf("  删除完成,按任意键继续...\n");getch();break;case 4:printlist(L);printf("  显示完成,按任意键继续...\n");getch();break;case 5:printf("  请输入需要查找的学生学号:");scanf("%d",&s.num);if(!findlist(L,s)){printf("\n  ****************************************\n");printf("  没有该学生数据\n");printf("  按任意键继续...\n");getch();break;}printf("  被查找的学生数据为:学号:%-5d 姓名:%-10s 成绩:%5.2f\n",s.num,s.name,s.score);printf("\n  ****************************************\n");printf("  查找完成,按任意键继续...\n");getch(); break;case 6:listrank(L);printf("  按成绩排序完成\n");printf("\n  ****************************************\n");printf("  按任意键继续...\n");getch();break;case 7:listsum(L);printf("  合计完成,按任意键继续...\n");getch();break;case 8:listsink(L);printf("\n  ****************************************\n");printf("  索引完成,按任意键继续...\n");getch();break;case 9:savelist(L);printf("\n  ****************************************\n");printf("  保存完成,按任意键继续...\n");getch();break;case 10:readlist(L);printf("\n  ****************************************\n");printf("  读取完成,按任意键继续...\n");getch();break;case 11:secondlist(L);printf("\n  ****************************************\n");printf("  备份完成,按任意键继续...\n");getch();break;case 0:destroylist(L);exit(0);default:printf("\n  ****************************************\n");printf("  输入有误\n");printf("  按任意键继续...\n");getch();}}}int menu(){int n;system("cls");printf("\n  ****************************************\n");printf("  *      学生成绩管理系统(1.0)           *\n");    printf("  ****************************************\n");printf("  *   2015585061  27  姜延锴  2016-12     *\n");printf("  ****************************************\n");printf("  *          01-增加学生数据              *\n");    printf("  *          02-插入学生数据              *\n");    printf("  *          03-删除学生数据              *\n");    printf("  *          04-显示学生数据              *\n");    printf("  *          05-查找学生数据              *\n");printf("  *          06-按成绩重新排序            *\n");printf("  *          07-合计                      *\n");printf("  *          08-索引查找                  *\n");printf("  *          09-保存文件                  *\n");printf("  *          10-读入文件                  *\n");printf("  *          11-备份文件                  *\n");    printf("  *           0-退出                      *\n");printf("  ****************************************\n");    printf("           请选择操作(0---11): "); scanf("%d",&n);getchar();return n;}int createlist(linklist &L){L=(linklist)malloc(sizeof(lnode));if(L==NULL){printf("分派空间失败\n");return 0;}L->next=NULL;return 1;}int listadd(linklist L){int num;linklist p;printf("  请输入学生学号(若输入0表示输入结束):");scanf("%d",&num);if(num==0)return 0;L->next=(linklist)malloc(sizeof(lnode));p=L->next;while(1){p->data.num=num;printf("  请输入学生姓名:");scanf("%s",&p->data.name);printf("  请输入学生成绩:");scanf("%f",&p->data.score);    printf("  请输入学生学号(若输入0表示输入结束):");scanf("%d",&num);if(num==0){p->next=NULL;return 1;}else{p->next=(linklist)malloc(sizeof(lnode));p=p->next;}}}int listinsert(linklist L,int i,STD x){int t=0;linklist q,p=L;while(p && t<i-1){p=p->next;++t;}if(!p || t>i-1)return 0;q=(linklist)malloc(sizeof(lnode));strcpy(q->data.name,x.name);q->data.num=x.num;q->data.score=x.score;q->next=p->next;p->next=q;return 1;}int listdelete(linklist L,STD &x){linklist p=L,q=L->next;while(q){if(q->data.num==x.num){x.score=q->data.score;strcpy(x.name,q->data.name);p->next=q->next;free(q);return 1;}else{p=q;q=q->next;}}return 0;}int findlist(linklist L,STD &x){linklist p=L,q=L->next;while(q){if(q->data.num==x.num){x.score=q->data.score;strcpy(x.name,q->data.name);return 1;}else{p=q;q=q->next;}}return 0;}void printlist(linklist L){linklist p=L->next;if(p){printf("  \n       数据显示\n");printf("  ******************************\n");printf("    学号      姓名     成绩\n");printf("  ******************************\n");while(p){printf("  %4d%10s%16f\n",p->data.num,p->data.name,p->data.score);p=p->next;}printf("  ******************************\n");}else{printf("  系统中无数据,请先插入数据!\n");}}int destroylist(linklist &L){linklist p=L->next;while(p){p=p->next;free(L->next);L->next=p;}return 1;}int listrank(linklist L)//冒泡排序{linklist p=L->next;linklist q;STD x;while(p){q=p->next;while(q){if(p->data.score<=q->data.score){x=p->data;p->data=q->data;q->data=x;}q=q->next;}p=p->next;}return 1;}int listlength(linklist L){int t=0;linklist p=L;while(p){p=p->next;++t;}return t;}void listsum(linklist L){int t=0;float sum=0.0;linklist p=L;while(p->next){t++;sum+=p->next->data.score;p=p->next;}printf("           合计结果:\n");printf("  ************************\n");printf("      总人数:%d \n",t);printf("      总数分:%f \n",sum);printf("  ************************\n");}void listsink(linklist L){int n;printf("  请输入索引值:1-学号 2-姓名 3-成绩\n");scanf("%d",&n);if(n==1){linklist p=L->next;if(p){while(p){printf("  学号:%d \n",p->data.num);p=p->next;}}else{printf("  系统中无数据,请先插入数据!\n");}}else if(n==2){linklist p=L->next;if(p){while(p){printf("  姓名:%s \n",p->data.name);p=p->next;}}else{printf("  系统中无数据,请先插入数据!\n");}}else if(n==3){linklist p=L->next;if(p){while(p){printf("  成绩:%f \n",p->data.score);p=p->next;}}else{printf("  系统中无数据,请先插入数据!\n");}}else printf("  输入错误,请重新输入\n");}void savelist(linklist L){ofstream fp;linklist p=L->next;fp.open("学生成绩管理系统.txt",ios::out);while(p){fp<<p->data.num<<"   "<<p->data.name<<"   "<<p->data.score<<"\n";p=p->next;}fp.close();printf("\n   保存文件完毕,请按任意键继续!\n   ");}void readlist(linklist L){string s;    ifstream input;    input.open("学生成绩管理系统.txt", ios::in);    if(!input)cout<<"error!"<<endl;    else while(input>>s){cout<<s<<"  ";    }}void secondlist(linklist L){ofstream fp;linklist p=L->next;fp.open("学生成绩管理系统(备份).txt",ios::out);while(p){fp<<p->data.num<<"   "<<p->data.name<<"   "<<p->data.score<<"\n";p=p->next;}fp.close();printf("\n   备份文件完毕,请按任意键继续!\n   ");}


0 0
原创粉丝点击