当前位置:文档之家› 学生管理系统 C语言

学生管理系统 C语言

C/C++程序设计课程设计报告专业:班级:学号:姓名:版本号:时间:目录1 概述 (2)1.1目的 (2)1.2计划 (2)2 课程设计过程及结果 (3)2.1编程环境及工具 (3)2.2排序与简单分析 (3)2.3综合设计 (3)2.3.1 功能实现 (3)2.3.2 程序异常处理 (5)2.3.3 特色功能 (5)3 课程设计总结 (6)3.1课程设计计划执行情况 (6)3.2我理解的C++ (6)3.3改进设想 (6)附录关键代码 (6)原创声明:本课程设计报告及相应的软件程序的全部内容均为本人独立完成,如有抄袭,愿承担相应后果。

声明人___________________学号:__________________1概述1.1 目的1、熟悉c语言的编译环境2、掌握c语言的基本操作3、回顾并加深对C/C++程序设计相关知识的理解,能够用C/C++独立完成简单数据管理软件的编写4、锻炼同学思维强度与能力5、培养同学认真态度和刻苦的精神1.2 计划用Microsoft Visual C++ 6.0进行编译,利用之前学过的课程知识和查询资料等方法完成题目的设计,用Debug进行调试。

1.回顾c语言编程基本内容,了解各种数据类型及掌握各种语句的结构类型。

2.完成一个简单任务:排序与简单分析把一个完全由小写字母组成字符串按照每个字母的出现次数从低到高重新排序。

出现次数相同的按照字母顺序排列,(a最前,z最后)。

输入:任意一个字符串(小写,长度小于255)输出:重新排序后的结果例如,输入:aassdfkjiowea回车则输出为:defijkowssaaa3.综合设计:设计实现学生成绩管理软件。

参考下面的数据,用C/C++设计一个简单的学生成绩管理软件,实现基本的功能。

学生信息文件(A.TXT)及其内容(示意):学号姓名性别班级200800800901 张三男电子0801200800820902 李四女通信0801200800800903 王五女电子0802200800820904 赵六男通信0801……课程信息(B.TXT)及其内容(示意):课程编号课程名称学分C01 大学英语 4C02 高等数学 4C03 C++程序设计 3……学生成绩信息文件(C.TXT)及其内容(示意,成绩保存使用浮点数):学号课程成绩200800800901 C01 89200800800902 C01 68.5200800800901 C02 45.5200800800903 C02 78实现数据录入显示功能查询功能数据删除、整理功能排序功能。

2课程设计过程及结果2.1 编程环境及工具环境变量的设置及作用环境变量的设置:右击我的电脑——高级——环境变量——在系统变量里有path选项——双击打开——在原有变量的基础上添加英文状态下的分号——然后将路径名输入即可作用:安装软件时往往须要向系统目录中复制某些文件,而使用另外一个系统时会由于缺少这些文件而无法运行。

因此,我们可以通过设置环境变量的方法来解决这个问题批处理及命令行编译2.2 排序与简单分析题目重述:把一个完全由小写字母组成字符串按照每个字母的出现次数从低到高重新排序。

出现次数相同的按照字母顺序排列,(a最前,z最后)。

输入:任意一个字符串(小写,长度小于255)输出:重新排序后的结果题目分析:此次设计排序有两个要求,并有优先排序。

1、先以字母个数的多少来排序2、字母字数相同的按照先后顺序来排。

要实现以上两个要求,最基本的方法是:先按字母先后顺序排序(冒泡排序法),存到一个数组a里,然后用两个数组b,c,一个记录字母的个数,一个记录字母的下标,然后对b数组排序,同时c也跟着排序,最后,用for循环把排好的字母顺序打印出来。

(具体见附录中的排序程序)。

2.3 综合设计2.3.1功能实现1.数据录入2..显示功能3.查询功能4.数据删除、整理功能2.3.1.1文件读入1.分别把三个文件录入到三个结构体里先定义结构体数组stu1[] ,stu2[],stu3[];stu1[6]用来记录学生信息,stu2[6]用来记录课程信息,stu3[12]用来记录成绩信息struct stu_info1{c har num[13];//学号c har name[10];//姓名c har sex[5];//性别c har cls[20];//班级}stu1[6];struct stu_info2{c har counum[6];//课程号c har counam[20];//课程名称i nt credit;//学分}stu2[6];struct stu_info3{c har num[13];//学号c har counum[6];//课程号f loat results;//分数}stu3[12];2.三个文件用fscanf来读到结构体里:void input1()//录入结构体stu1[]{i nt i;F ILE *fp;i f((fp=fopen("A.txt","r"))==NULL){printf("can not open file\n");exit(0);}f or(i=0;i<=5;i++){fscanf(fp,"%s%s%s%s",&stu1[i].num,&stu1[i].name,&stu1[i].sex,&stu1[i].cls);}f close(fp);}此处只写了将A.txt录入结构体stu1[6]的子函数,将B.txt,C.txt 录入stu2[6],stu3[12]的子函数和这个子函数类似,具体函数请参考附录中的子函数input2()和output() 函数。

2.3.1.2数据录入1用只读方式打开.C.txt,FILE *fp;fp=fopen("C.txt","w");2.判断学号,课程号是否分别在A.txt和B.txt中存在。

.当输入学号和课程号后,先检查在学号在A.txt中是否存在,若存在,再检查课程号是否在B.txt中存在(检查的时候用字符串比较函数strcmp)。

3.把成绩录入到C.txt里第2步判断学号和课程号是否分别在A.txt和B.txt中存在后,若都存在就用fprintf录入C.txt,否则提示错误,重新输入。

具体数据录入的程序见附录中的子函数input3()。

2.3.1.3信息显示能分别显示学生信息,课程信息,和成绩信息,显示成绩信息时,课程号用课程名称代替,学号用学生姓名代替。

显示学生信息和成绩信息就是直接输出结构体stu1[6],stu2[6] 就可以;显示成绩信息时,需要用循环,从结构体stu3[12] 里挨个输出时,学号需要从stu1[6]中查找,找到后显示该同学姓名,课程号需要从stu2[6]中查找,找到后显示课程名称,成绩直接显示stu3[12]中的成绩就可以。

具体成绩显示的代码见附录中的子函数xianshi(),printf1(),printf2() 。

2.3.1.4信息的查找文件的打开方式,均为只读。

思路:1.输入学号2.在C.txt中寻找,若找不到,输出“学号输入错误”3.若找到C.txt中寻找相应的课程号和成绩。

4.根据学号在A.txt里寻找姓名,根据课程号在B.txt中寻找课名与学分,输出时候,若成绩小于六十,学分输出为0,反之则输出在B.txt里查到的学分。

5.实现学分与课程的统计2.3.2程序异常处理在编程的过程中,大部分错误,是由于自己忘了加“;”或者是括号“()”或“{}”没有相对应而引起的形式错误。

这种错误容易改正。

有的时候用fopen打开文件忘记用fclose关闭,这时候检查不出错误,但是运行不行。

有的时候用scanf获取数据的时候,获取的不是字符串,但是忘记了加&,也会导致检查不出错误,但是运行结果不对。

2.3.3特色功能能实现更新C.txt的功能,即当A.txt ,B.txt的内容改变时,C中的内容用一个函数去更新。

本程序中,还实现了区分管理员功能和学生功能,录入功能和更新功能只有管理员可以使用,需要输入管理员密码。

3课程设计总结3.1 课程设计计划执行情况基本按照计划进行。

实现了四个基本功能,扩展了管理员密码的功能。

编程的过程是不太难的的,但找错的过程难。

经常因为程序运行不正常,找了很长时间才找出错误。

此次编程中,让我更理解了编程中格式的重要性和注释的重要性。

我学会了一句话:程序不只是写给你自己看的。

我也知道了良好的编程习惯有多重要。

3.2 我理解的C++在这次课程设计中,我发现了C语言竟然这么强大,以前就以为C语言能算个加减乘除什么的,就以为就是电脑运行的比人脑快,所以C语言才很重要,以前认为花好长时间编个程序真没必要,比如加法程序,有编的时间还不如自己算呢!现在我知道了C语言很强大,也认识到了C的重要性,知道了C语言能做很多事情。

以后一定要学好编程。

3.3 改进设想增加用户登录和密码功能,把这个程序包装起来,做的和学校的教务系统类似。

附录关键代码排序代码#include"stdio.h"#include"string.h"void main(){int t,i,j,k,m;char a[255]={0};int b[26]={0},c[26]={0};scanf("%s",a);m=strlen(a);for(i=0;i<m-1;i++)for(j=0;j<m-1-i;j++)if(a[j]>a[j+1]){t=a[j+1];a[j+1]=a[j];a[j]=t;}i=0;k=0;for(j=m-1;j>=i;j--)if(a[i]==a[j]){b[k]=i;c[k]=j-i+1;i=j+1;k=k+1;j=m;}for(i=0;i<k-1;i++)for(j=0;j<k-i-1;j++)if(c[j]>c[j+1]){t=c[j];c[j]=c[j+1];c[j+1]=t;t=b[j];b[j]=b[j+1];b[j+1]=t;}for(i=0;i<=k-1;i++)for(j=1;j<=c[i];j++)printf("%c",a[b[i]]); printf("\n");}学生成绩管理软件代码:#include"stdio.h"#include"stdlib.h"#include"string.h"struct stu_info1{char num[13];//学号char name[10];//姓名char sex[5];//性别char cls[20];//班级}stu1[6];struct stu_info2{char counum[6];//课程号char counam[20];//课程名称int credit;//学分}stu2[6];struct stu_info3{char num[13];//学号char counum[6];//课程号float results;//分数}stu3[12];struct stu_info4{char num[13];//学号char counum[6];//课程号float results;//分数}stu4[12];int n=11;void main(){void gengxin();void input1();void input2();void input3();void output();void xianshi();void chaxun();void printf1();void printf2();input1();input2();output();int i;loop: ;printf("*************欢迎使用分数查询系统*************\n");printf("** 请选择**\n");printf("** 1.录入2.删除无用信息(管理员功能) **\n");printf("** 3.显示4.查询(学生功能) **\n");printf("** 5.显示学生信息6.显示课程信息**\n");printf("** 7.退出**\n");printf("**********************************************\n");scanf("%d",&i);switch(i){case 1: input3();break;case 2:gengxin();break;case 3:xianshi();goto loop;case 4: chaxun();goto loop;case 5: printf1();goto loop;case 6: printf2();goto loop;case 7:break;default:printf("error");break;}}void input1()//录入结构体stu1[]{int i;FILE *fp;if((fp=fopen("A.txt","r"))==NULL){printf("can not open file\n");exit(0);}/* printf(" 学号姓名性别班级\n");*/for(i=0;i<=5;i++){fscanf(fp,"%s%s%s%s",&stu1[i].num,&stu1[i].name,&stu1[i].sex,&stu1[i].cls);/*printf("%-13s %-10s %-5s %-20s\n",stu1[i].num,stu1[i].name,stu1[i].sex,stu1[i ].cls);*/}fclose(fp);}void input2()//录入结构体stu2[]{int i;FILE *fp;if((fp=fopen("B.txt","r"))==NULL){printf("can not open file\n");exit(0);}for(i=0;i<=5;i++){fscanf(fp,"%s%s%d",&stu2[i].counum,&stu2[i].counam,&stu2[i].credit);}fclose(fp);}void input3()//录入成绩{FILE *fp;fp=fopen("C.txt","w");int a,i,j,k;float cetss;char number[13],cnum[6],mima[10];printf("请输入管理员密码\n");scanf("%s",mima);if(strcmp(mima,"abc111")==0){printf("请输入要录入学生成绩的个数\n");scanf("%d",&a);for(i=1;i<=a;i++){printf("请输入要录入的第%d同学的学号:",i);scanf("%s",number);printf("请输入要录入的第%d同学的课程号:",i);scanf("%s",cnum);for(j=0;j<=5;j++)//学号{if((strcmp(number,stu1[j].num)==0))break;}if(j<=5){for(k=0;k<=5;k++)//课程号{if(strcmp(cnum,stu2[k].counum)==0){printf("请输入要录入同学的成绩:");scanf("%f",&cetss);fprintf(fp,"%s %s %f\n",number,cnum,cetss);break;}}}if(j>5||k>5){printf("Error,please input again");i=i-1;}printf("录入成功\n");}}else{printf("密码错误\n");}}void output()// 录入结构体stu3[]{int i;FILE *fp=fopen("C.txt","r");for(i=0;i<n;i++){fscanf(fp,"%s%s%f",&stu3[i].num,&stu3[i].counum,&stu3[i].results);/*printf("%s%s%f\n",stu3[i].num,stu3[i].counum,stu3[i].results);*/ }fclose(fp);}void xianshi()// 显示成绩{int i,j;for(i=0;i<n;i++){for(j=0;j<6;j++){if((strcmp(stu3[i].num,stu1[j].num))==0)printf("%s\t",stu1[j].name);}for(j=0;j<6;j++){if(strcmp(stu3[i].counum,stu2[j].counum)==0)printf("%s\t",stu2[j].counam);}printf("%3.1f\n",stu3[i].results);}}void chaxun()//查询功能{char number[13],c;int i,j,k,a,b,d;while((c=getchar())!='Q'){a=0,b=0;//a记录学分b记录学科printf("请输入要查询同学的学号\n");scanf("%s",number);for(i=0;i<n;i++){if(strcmp(number,stu3[i].num)==0){printf("学号:%s\t",stu3[i].num);for(j=0;j<6;j++){if(strcmp(stu3[i].num,stu1[j].num)==0){printf("姓名:%s\n",stu1[j].name);}}break;}}d=i;for(i=0;i<n;i++)if(strcmp(number,stu3[i].num)==0){b=b+1;for(j=0;j<6;j++){if(strcmp(stu3[i].num,stu1[j].num)==0){for(k=0;k<6;k++){if(strcmp(stu3[i].counum,stu2[k].counum)==0)break;}break;}}if(stu3[i].results>=60){a=a+stu2[k].credit;printf("课程号:%s\t课程名称:%s\t成绩:%3.1f\t实得学分:%d\n",stu3[i].counum,stu2[k].counam,stu3[i].results,stu2[k].credit);}elseprintf("课程号:%s\t课程名称:%s\t成绩:%3.1f\t实得学分:%d\n",stu3[i].counum,stu2[k].counam,stu3[i].results,0);}if(d<n){printf("共修%d科\t\t实得总学分:%d\n",b,a);}else{printf("学号输入错误\n");}getchar();printf("退出请按Q+回车,继续查询请按回车键");}}void gengxin()//更新信息,删除C.txt中无用信息{FILE *fp;int i,j,k;char mima[10];printf("请输入管理员密码\n");scanf("%s",mima);if(strcmp(mima,"abc111")==0){fp=fopen("C.txt","w");for(i=0;i<n;i++){for(j=0;j<6;j++)if(strcmp(stu3[i].num,stu1[j].num)==0){for(k=0;k<=5;k++)if(strcmp(stu3[i].counum,stu2[k].counum)==0)break;if(k<=5){fprintf(fp,"%s %s %f\n",stu3[i].num,stu3[i].counum,stu3[i].results);}}}printf("更新C.txt成功\n");fclose(fp);}else{printf("密码错误\n");}}void printf1()//显示学生信息{int i;printf(" 学号姓名性别班级\n");for(i=0;i<=5;i++){printf("%-13s%-10s%-5s %-20s\n\n",stu1[i].num,stu1[i].name,stu1[i].sex,stu1[i].cls);}}void printf2()//显示课程信息{int i;printf(" 课程编号课程名称学分\n");for(i=0;i<=5;i++){printf("%-6s%-20s %-4d\n\n",stu2[i].counum,stu2[i].counam,stu2[i].credit);}}。

相关主题