《数据结构课程设计源程序+实验报告c语言.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计源程序+实验报告c语言.docx(39页珍藏版)》请在三一办公上搜索。
1、数据结构课程设计源程序+实验报告c语言目录 学生成绩管理系统 一课设分析 . 1 二概要设计 . 2 三详细设计 . 3 四调试分析 . 4 五课设总结 . 5 一 课程设计分析: 功能需求: 1、提供身份验证,和使用系统的权限设置、判定。 2、能实现08信管5或6班同学各学期各科成绩的录入、并编辑好每个学生的信息,输入的数据必须保存在指定的文件中,以便反复使用。 3、提供对学号或姓名,各学期、各学科成绩的查询。 4、能按各学期、各学科分数排序输出(每一科都要能排序输出)。 5、能统计各科成绩分数段的分布情况,并输出。 课程设计的要求与数据: 我按找老师给的课程设计指导书要求,完成本次的课程设
2、计。要求能根据所学数据结构有关知识,实现系统问题域逻辑结构的表达,存储结构的选择,以及算法的设计。并编写出C语言源程序,在计算机上调试运行通过。能根据前面的工作内容撰写课程设计报告,报告应做到图表使用正确,结构合理,语句通顺。 二 详细功能设计: 创建用户界面 进入登陆界面 创 建 教 师 用 户 系 统 登 陆 学 生 或 游 客 系 统 退出 欢迎界面 创建用户界面 用户登陆界面 教师用户操作界面 创建 显示 查找 删除 修改 排序 存 储 读 取 教师用户操作 教师用户登陆 学生用户登陆 返回创建 用户登陆界面 进入登陆界面 退出 返回 退出 插入 排序类型 排序 按按按按学语数英 号
3、文学语排成成成 序 绩 绩 绩 排排排 序 序 序 学生用户操作界面 学生用户操作界面 显查排示 找 序 按平均分成绩 排序 源程序: #include #include #include #include #include #define MAX 100 /*结构体定义*/ typedef struct char idtMAXMAX,passwordtMAXMAX,idsMAXMAX,passwordsMAXMAX; / 密码结构体 ID; typedef struct node char name10; int num; int chinese; int math; int english
4、; float average; struct node *next; student; /*被调用的函数名*/ ID *createidentity; ID *teacher; ID *_student; void menu1; void cmpteacher; void cmpstudent; menu2; menu3; student *create; void print; void search; student *_delete; student *change; student *sort0; student *sort; student *sort1; student *sor
5、t2; student *sort3; student *sort4; student *insert; void save; student *load; /*创建用户界面*/ ID *createidentity(ID *t) int i; printf(*n); printf(* 用户创建操作界面*n); printf(* *n); printf(* 同时创建教师学生用户*n); printf(*n); printf(* 0.进入登陆界面*n); printf(* 1.创建教师用户*n); printf(* 2.创建学生用户*n); printf(* 3.退出*n); printf(*n
6、); printf(选择你要创建的账户类型:); scanf(%d,&i); while(i0&i3) switch(i) case 1:system(cls);t=teacher(t);system(cls);break; case 2:system(cls);t=_student(t);system(cls);break; case 3:exit(0); printf(*n); printf(* 用户登陆操作界面*n); printf(*n); printf(* 0.进入登陆界面 *n); int i; printf(* 1.创建教师用户 char x; printf(*n); print
7、f(* 2.创建学生用户 *n); printf(* 学生用户创建界面 *n); *n); printf(* 3.退出 *n); printf(*n); printf(选择你要创建的账户类型:); scanf(%d,&i); if(i=0) break; return t; /*教师创建账号*/ ID *teacher(ID *t) int i,j=0; char x; printf(*n); printf(* 教师用户创建界面 *n); printf(*n); printf(输入#创建(任意字符结束创建):); scanf(%s,&x); for(i=0;iidti); /*for(j=0;
8、jidtij);*/ printf(密码:); scanf(%s,&t-passwordti); printf(*n); printf(输入#创建(任意字符结束创建):); scanf(%s,&x); else break; return t; /*学生创建账号*/ ID *_student(ID *t) printf(*n); printf(输入#创建(任意字符结束创建):); scanf(%s,&x); for(i=0;iidsi); printf(密码:); scanf(%s,&t-passwordsi); printf(*n); printf(输入#创建(任意字符结束创建):); sc
9、anf(%s,&x); else break; return t; /*选择用户菜单*/ void menu1(ID *t) int i; printf(* *n); printf(* 用户登陆界面 *n); printf(*n); printf(* 1.教师用户 *n); printf(* 2.学生用户 *n); printf(* 3.返回创建 *n); printf(* 4.退出 *n); printf(*n); printf(请输入你要操作的用户选项:); scanf(%d,&i); while(i0&i6) switch(i) case 1:system(cls);cmpteacher
10、(t);system(cls);break; case 2:system(cls);cmpstudent(t);system(cls);break; case 3:system(cls);createidentity(t);system(cls);break; case 4:exit(0); printf(*n); printf(* 用户登陆界面 *n); printf(*n); printf(* 1.教师用户 *n); printf(* 2.学生用户 *n); printf(* 3.返回创建 *n); printf(* 4.退出 *n); printf(*n); printf(请输入你要登陆
11、的用户选项:); scanf(%d,&i); if(i=0) break; /*教师账号密码对比*/ void cmpteacher(ID *t) student *h; int i,j=0; char x,y=1; char str1MAXMAX,str2MAXMAX; printf(*n); printf(* 教师用户创建界面 *n); printf(*n); printf(输入 # 进入账号密码输入:); scanf(%s,&x); for(i=0;iMAX;i+) printf(账号:); scanf(%s,&str1i); printf(密码:); scanf(%s,&str2i);
12、 for(j=0;jidtj)=0&strcmp(str2i,t-passwordtj)=0) system(cls); for(;) switch(menu2) case 1:system(cls);h=create;break; case 2:system(cls);print(h);break; case 3:system(cls);search(h);break; case 4:system(cls);h=_delete(h);break; case 5:system(cls);h=change(h);break; case 6:system(cls);h=sort0(h);break
13、; 7:system(cls);save(h);break; case 8:system(cls);h=load;break; case case 9:system(cls);menu1(t);break; case 10:exit(0); case 11:system(cls);h=insert(h);break; printf(n); printf(任意字符继续:); scanf(%s,&x); if(x=#) break; / 使用界面 y=0; if(y=0) break; else if(j=99) break; /教师用户操作界面 if(y!=0) printf(账号或密码有误!n
14、);system(pause); else cmpstudent(t,h); system(cls); printf(*n); printf(* 教师用户创建界面 *n); printf(*n); printf(任意字符输入教师账号密码:); scanf(%s,&x); printf(* 学生用户创建界面 if(x=#) break; *n); printf(* *n); printf(输入 # 进入账号密码输入:); menu2 scanf(%s,&x); for(i=0;iMAX;i+) int n; system(cls); printf(账号:); printf(*scanf(%s,&
15、str1i); *n); printf(密码:); printf(* 教师用户操作界面 scanf(%s,&str2i); *n); printf(*n); printf(* 1.创建 *n); printf(* 2.显示 *n); printf(* 3.查找 *n); printf(* 4.删除 *n); printf(* 5.修改 *n); printf(* 6.排序 *n); printf(* 7.储存 *n); printf(* 8.读取 *n); printf(* 9.返回 *n); printf(* 10.退出 *n); printf(* 11.插入 *n); printf(*n)
16、; printf(请输入您想执行的程序:); do scanf(%d,&n); while(n15); return (n); /*学生账号密码对比*/ void cmpstudent(ID *t,student *h) int i,j=0; char x,y=1; char str1MAXMAX,str2MAXMAX; system(cls); printf(*n); for(j=0;jidsj)=0&strcmp(str2i ,t-passwordsj)=0) system(cls); menu3(h); / 使用界面 y=0; if(y=0) break; else if(j=99) b
17、reak; / if(y!=0) 教师用户操作界面 printf( 账号或密码有误!n); printf(任意字符输入学生账号密码: ); scanf(%s,&x); if(x=#) break; menu3(student *h) int i; printf(*n); printf(* 学生用户操作界面 *n); printf(*n); printf(* 1.显示 *n); printf(* 2.查找 *n); printf(* 3.排序 *n); printf(*n); printf(输入你要执行的程序:); scanf(%d,&i); for(;) switch(i) case 1:sy
18、stem(cls);print(h);break; case 2:system(cls);search(h);break; case 3:system(cls);h=sort0(h);break; system(pause); system(cls); printf(*n); printf(* 学生用户操作界面*n); printf(*n); printf(* 1.显示*n); printf(* 2.查找*n); printf(* 3.排序*n); printf(*n); printf(输入你要执行的程序(输入1000结束):); scanf(%d,&i); if(i=1000) break;
19、 /*创建学生成绩*/ student *create student *pstart,*h; char x,tag; h=(student *)malloc(sizeof(student); h=NULL; printf(输入结束标志:); scanf(%s,&tag); printf(输入判断标志:); scanf(%s,&x); while(x!=tag) pstart=(student *)malloc(sizeof(student); printf(请输入学号:n); scanf(%d,&pstart-num); printf(请输入姓名:n); scanf(%s,&pstart-n
20、ame); printf(请输入语文成绩:n); scanf(%d,&pstart-chinese); printf(请输入数学成绩:n); scanf(%d,&pstart-math); printf(请输入英语成绩 :n); glish); scanf(%d,&pstart-en pstart-average=(float)(pstart-chinese+pstart-math+pstart-english)/3; pstart-next=h; h=pstart; printf(输入判断标志:); scanf(%s,&x); return h; /*成绩输出*/ void print(st
21、udent *h) student *pstart; pstart=(student *)malloc(sizeof(student); pstart=h; if(pstart=NULL) system(cls); printf(ntt当前没有学生信息n); system(pause); else printf( 学号姓名 语文 数学 英语平均分n); while(pstart) printf(%10d%10s%8d%8d%8d%16fn,pstart-num,pstart-name,pstart-chinese,pstart-math,pstart-english,pstart-averag
22、e); pstart=pstart-next; /*插入*/ student *insert(student *h) student *q,*p,*pstart; int a; printf(请输入要插入点学生的学号:); scanf(%d,&a); system(pause); pstart=(student *)malloc(sizeof(student); if(!pstart) printf(n空间不足。); return NULL; printf(新的学生信息:n); printf(请输入学号(上面那个数字):n); scanf(%d,&pstart-num); printf(请输入
23、姓名:n); scanf(%s,&pstart-name); printf(请输入语文成绩:n); scanf(%d,&pstart-chinese); printf(请输入数学成绩:n); scanf(%d,&pstart-math); printf(请输入英语成绩:n); scanf(%d,&pstart-english); pstart-average=(float)(pstart-chinese+pstart-math+pstart-english)/3; pstart-next=NULL; p=h; q=h; while(pstart-num!=a&pstart!=NULL) q=p
24、;p=p-next; if(p=NULL) if(p=h) h=pstart; else q-next=pstart; else if(p=h) pstart-next=p; h=pstart; else pstart-next=p; q-next=pstart; printf(已经插入学号为%d同学的信息。,a); printf(别忘了保存。n); return(h); /*按学号查找学生*/ void search(student *h) student *pcheck; int c; printf(请输入学号:n); scanf(%d,&c); pcheck=h; while(pchec
25、k-num!=c&pcheck!=NULL) pcheck=pcheck-next; if(pcheck=NULL) printf(n没有学号为 %d 同学的记录。n,c); else printf( 学号 姓名 语文数学 英语 平均分n); printf(%10ld%8s%8d%8d%8d%16fn,pcheck-num,pcheck-name,pcheck-chinese,pcheck-math,pcheck-english,pcheck-average); /*删除一个学生纪录*/ student *_delete(student *h) student *pstart,*pend; i
26、nt num; system(cls); print(h); printf(请输入您要删除的学生学号:); scanf(%d,&num); pstart=pend=h; while(pstart-num!=num&pstart!=NULL) pend=pstart; pstart=pstart-next; if(pstart=NULL) printf(没有该学生的记录n); else if(pstart=h) h=pstart-next; else pend-next=pstart-next; free(pstart); printf(该学生的成绩已被删除n); system(pause);
27、system(cls); print(h); return(h); /*修改学生信息*/ student *change(student *h) student *pstart; int c; int num; system(cls); print(h); printf(请你输入你要修改的学生的学号:); scanf(%d,&num); pstart=h; while(num!=pstart-num&pstart!=NULL) pstart=pstart-next; if(pstart=NULL) printf(ntt当前没有学生信息n); else system(cls); do print
28、f(t学号t姓名t语文t数学t英语t平均分n); printf(请你输入你想修改的信息n); printf(*n); printf(* 1.学号 *n); printf(* 2.姓名 *n); printf(* 3.语文 *n); printf(* 4.数学 *n); printf(* 5.英语 *n); printf(*n); printf(输入你要修改的项目:); scanf(%d,&c); switch(c) case 1 : printf(请输入学号:); scanf(%d,&pstart-num); printf(修改成功n); break; case 2 : printf(请输入姓
29、名:); scanf(%s,&pstart-name); printf(修改成功n); break; case 3 : printf(请输入语文成绩:); scanf(%d,&pstart-chinese); printf(修改成功n); break; case 4 : printf(请输入数学成绩:); scanf(%d,&pstart-math); printf(修改成功n); break; case 5 : printf(请输入英语成绩:); scanf(%d,&pstart-english); printf(修改成功n); break; while(c5); if(c2&caverage=(float)(pstart-chinese+pstart-math+pstart-english)/3; system(cls); print(h); return(h); /*平均分排序*/ student *sort4(student *h) int i=0; student *p1,*p2,*t,*temp; temp=h-next; h-next=NULL; while(temp!=NULL) t=temp; temp=temp-next; p1=h; p2=h; while(t-averageaverage&p1!=NULL)