聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> C语言课程设计学生信息管理系统河南工程学院伊国彪

C语言课程设计学生信息管理系统河南工程学院伊国彪

时间:2019-06-16 05:46:12    下载该word文档

《数据结构》课程设计

成果报告

伊国彪

201512211231

计算机学院

专业班级 软件工程1542

专业课程 数据结构

指导老师

2016 12 26


河南工程学院计算机学院

课程设计报告书

课程设计题目: 学生成绩管理系统

课程设计时间: 12 19 1223

课程设计地点: 综合楼B310

课程设计单位: 计算机学院

指导教师: 张天伍 学院院长: 曲宏山

课程设计成绩评定标准及成绩评定表

学生姓名: 伊国彪 学号 201512211231专业班级: 软件工程1542

成绩评定:

指导教师:

201612


1 设计目标

(1)掌握指针数组的一般储存的基本概念及存储结构.

(2)利用指针数组的一般储存对学生成绩进行基本操作。

包括创建、插入、删 除、排 上要以菜单选项形式体现出来. 学生成绩管理系统

设计程序,要求实现下面功能:

2.1可以输入学生成绩

(学号、姓名、性别、课程成绩(多门课程),总分)

2.2可以查看所有学生成绩

2.3可以插入、删除某个学生的成绩

2.4根据学号查找某个学生成绩

2.5对所有学生成绩进行排序(按课程、按总分、按单科进行排序)

3)通过本次设计型实验使我们在学习完C、数据结构等课程基础上对前面所学的知识做一个总结与回顾。

4)通过该课程设计,使我们对老师课上的讲述有了更深的理解,让我们学有所展示。

5)将指针数组的一般储存应用到具体生活中,使我们了解了数据结构这一门课在实际生活中的应用。

2 课题分析与设计

.1 课题需求分析

利用所学数据结构理论知识完成“学生成绩管理系统”的设计。

1)其功能具体包括:

1 登录功能:输入正确登陆密码点击enter键进入总界面让后进行余下功能。

2录入功能:可以输入20位同学信息可以输入学生成绩(学号、姓名、性别、课程成绩(多门课程),

3浏览功能:完成对全部学生信息记录浏览可以查看所有学生成绩

4添加功能:在已有的学生信息基础下进行添加,增加学生信息

5删除功能:所有信息录入完备后对学生信息进行整理去掉那些录入错误学生

6排序功能:对学生信息中的课程,成绩,进行排序使用冒泡排序将分数高的学生排在前面

7查找功能:输入学生学号就可以查找学生的信息

8退出功能:所有工作完成后输入退出键退出。

2)简明思路

建立学生成绩管理系统,需要逐步的完善。进入系统之后,首先要有一个主界面,主界面要求要输入密码,如果密码输错三次,成绩查询系统自动锁定。然后输入数据记录,将学生的基本信息包括学号,姓名,性别,多门课程成绩(包括数据结构,离散数学,JavaEE)总分数据作为一个记录写入文件。然后显示输入的学生的各项信息。然后增加数据记录,增加多个学生的成绩信息,位于之前的学生后面。然后删除数据记录,删除学生成绩信息。然后还可以查寻成绩,可以根据学生的学号查找并显示出学生的成绩信息。最后还要对所有学生成绩进行排序(按课程、按总分、按单科进行排序)。经过逐层逐块、不断细化、求精过程,编写程序并进行测试、验证,可以逐个模块地分开调试,并通过文件包含或用工程文件的形式进行逐步联合调试。

.2 存储结构设计

struct student //定义学生结构体,利用指针数组存储学生成绩信息

{

long num; //成员变量学号为长整型

char name[20]; //姓名为字符串型

char sex[2]; //性别为字符串型

int score[3]; //分数为整型

int sum; //总分为整型

int ave; //平均分为整型

}stu[N];

.3 算法设计

1.void enter()(主菜单函数)中用switch语句实现功能选择。具体代码如下:

switch(choice)

{

case 1: input();break;

case 2: display(); break;

……

default: w = 1;

}

2.void input()(录入学生成绩函数)在void add()(增添学生成绩函数)中用do…while …语句实现学生信息的输入。具体代码如下:

do{

printf("请输入第%d 个学生的信息.\n\n",t);

printf("学号:");

scanf("%ld",&p->num); //输入学号存放在num

……

}while(x==1);

3.void display() (显示学生信息函数)和void delet()(删除学生成绩)及void fint() (查找学生信息函数)中主要用for循环语句及其嵌套语句实现逐个输出学生成绩信息、删除学生成绩信息及查询学生成绩信息。具体代码如下:

for(j=0;j

{

printf("%ld\t%s\t%s\t",stu[j].num,stu[j].name,stu[j].sex); //输出学号、姓名、性别

for(i=0;i<3;i++)

printf("%d\t", stu[j].score[i]); //输出各科分数

……

}

4.void fint()(统计学生成绩函数)中主要用冒泡排序法实现学生成绩的排列。具体算法如下:

for(i=0;i

{

for(j=i+1;j

if(stu[i].score[1]

{

k = stu[i].score[1]; //交换分数

stu[i].score[1] = stu[j].score[1];

stu[j].score[1] = k;

}

}

.4 程序流程图

Y N

 程序清单

#include //定义了输入输出函数、类型和宏

#include //五种类型、一些宏和通用工具函数

#include //可以引用其中声明的函数。

#include //常用的C字符串处理函数

#define N 20 //全局变量

struct student //定义学生结构体

{

long num; //学号为长整型

char name[20]; //姓名为字符串型

char sex[2]; //性别为字符串型

int score[3]; //分数为整型

int sum; //总分为整型

int ave; //平均分为整型

}stu[N]; //结构体数组

int t = 1,pl= 0;

void enter(); //主菜单函数

void input(); //录入函数

void display(); //显示函数

void add(); //增添函数

void delet(); //删除函数

void preside(); //查找函数

void fint(); //排序函数

void output(); //结束函数

void main()

{ //初始界面输入验证密码

int password,i;

printf("\n\n\n\n\t\t\t欢迎进入学生成绩管理系统\n");

for(i = 1;i<=3;i++) //循环计数,输错三次,系统锁定

{

printf("\n\n\t\t\t请输入密码:");

scanf("%d",&password);

if(password==5201314) //设置密码为5201314

{

enter(); //输入正确调用主菜单函数

break;

}

printf("\\t\t输入错误,请再次输入!");

}

printf("\n密码输入三次有误!系统锁定!");

}

void enter() //进入主菜单函数

{

int choice,w;

char k;

system("cls"); //执行控制台命令cls,功能是清屏,清除所有显示的信息

printf("\t\t\t学生成绩管理系统\n\n");

printf("\t\t1. 录入.\t2. 显示.\t3. 增项.\t4. 删项.\n\t\t5. 排序.\t6. 查找.\t7. 退出.\n");

printf("\n 输入序号执行相应功能:");

scanf("%d",&choice);

switch(choice)

{

case 1: input();break; //执行录入函数,然后结束循环

case 2: display(); break; //执行显示函数,然后结束循环

case 3: add();break; //执行增添函数,然后结束循环

case 4: delet();break; //执行删除函数,然后结束循环

case 5: preside(); break; //执行查询函数,然后结束循环

case 6: fint(); break; //执行排序函数,然后结束循环

case 7: output();break; //执行结束函数,然后结束循环

default: w = 1; //其他情况

}

if(w==1)

{

printf("输入有误按任意键重新选怿.\n");

k=getchar(); //从标准输入控制台读取字符

getch(); //不回显函数,当用户按下某个字符时,函数自动读取,无需按回车

enter(); //回车

}

}

void input() //学生信息录入的函数

{

int x,i,count = 0;

char w,r[20],o;

struct student *p; //定义指向结构体的指针p

p=stu; //p指向指针数组stu

system("cls"); //执行控制台命令cls,功能是清屏,清除所有显示的信息

printf("\t\t\t 学生信息的录入.\n");

do

{

pl++;

printf("请输入第%d 个学生的信息.\n\n",t);

printf("学号:");

scanf("%ld",&p->num); //输入学号存放在num

printf("姓名:");

scanf("%s",&p->name); //输入姓名存放在name

printf("性别:");

gets(r);

gets(p->sex);//输入性别存放在sex

printf("三门成绩:1高等数学.2.大学英语.3.c语言.\n");

for(i=0;i<3;i++)

{

scanf("%d",&p->score[i]);

while(p->score[i]<0||p->score[i]>100)

{

printf("输入分数有误,请重新输入!\n");

scanf("%d",&p->score[i]);

}

}

p->sum = p->score[0] + p->score[1] + p->score[2]; //求总分

p->ave = p->sum/3; //求平均分

printf("\n\n 是否要继续输入学生信息,如果是请按y;不是请按n.\n");

o=getchar(); //获取字符串

w=getchar(); //获取字符串

if(w=='y' || w=='Y')

{

t++; //学生数量加1

x=1;

p++;

}

else

x=0;

}while(x==1);

if(w=='n' || w=='N')

printf("按任意键返回.\n");

getch(); //不回显函数,当用户按下某个字符时,函数自动读取,无需按回车

enter(); //回车

}

void display() //显示学生信息函数

{

int i,j;

system("cls");

printf("\t\t\t 学生信息显示.\n\n");

for(j=0;j

{

printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n\n","学号","姓名","性别","高等数学","大学英语","c语言","平均分","总分");

printf("%ld\t%s\t%s\t",stu[j].num,stu[j].name,stu[j].sex); //输出学号、姓名、性别

for(i=0;i<3;i++)

printf("%d\t", stu[j].score[i]); //输出各科分数

printf("%d\t", stu[j].ave); //输出平均分

printf("%d\t", stu[j].sum); //输出总分

printf("\n\n");

}

printf("\n 按任意键返回.\n");

getch(); //不回显函数,当用户按下某个字符时,函数自动读取,无需按回车

enter(); //回车

}

void add() //学生信息的增添

{

int i,x;

char a, w;

struct student *p; //定义指向结构体的指针p

p=stu+t; //p指向指针数组stu+t

system("cls"); //执行控制台命令cls,功能是清屏,清除所有显示的信息

printf("\n\t\t\t增加学生信息.\n");

do

{

printf("请输入第%d 个学生的信息.\n\n",t+1);

printf("学号:");

scanf("%ld",&p->num); //输入学号存放在num

printf("姓名:");

scanf("%s",&p->name); //输入姓名存放在name

printf("性别:");

scanf("%s",&p->sex); //输入性别存放在sex

printf("三门成绩:1.高等数学.2.大学英语.3.c语言.\n");

for(i=0;i<3;i++)

scanf("%d",&p->score[i]);

for(i=0;i<3;i++)

p->sum = p->score[0] + p->score[1] + p->score[2];

p->ave = p->sum/3;

a=getchar();

printf("\n 是否要继续输入学生信息如果是请按y;不是请按n.\n\n");

w=getchar();

p++;

t++; //学生数加1

if(w=='y'||w=='Y') //判断输入字符

{

x=1;

}

if(w=='n'||w=='N')

{

x=0;

break;

}

}while(x==1);

if(x==0)

{

printf("\n");

printf("按任意键返回.\n");

getch(); //不回显函数,当用户按下某个字符时,函数自动读取,无需按回车

enter(); //回车

}

}

void delet() //学生信息的删除

{

long b;

int j;

int r=t; //t赋值给r

char c,x;

struct student *p; //定义指向结构体的指针p

system("cls"); //执行控制台命令cls,功能是清屏,清除所有显示的信息

printf("\n\t\t\t删除学生信息\n");

printf(" 请输入要删除学生的学号:\n\n");

scanf("%ld",&b);

for(p=stu;p循环/查找学生

if(p->num==b)

break; //找到结束循环

else

r--;

if(r==0) //没有找到要删除的学生

{

printf("你要删除的学生不存在,请按任意键返回.\n");

getch();

enter();

}

printf("\n 你要删除的学生为:\n");

printf("%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-8s\n\n","学号","姓名","性别","高等数学","大学英语","c语言","平均分","总分");

printf("%-8ld%-8s%-8s",p->num,p->name,p->sex);

for(j=0;j<3;j++)

printf("%-8d",p->score[j]);

printf("%-8d",p->ave);

printf("%-8d",p->sum);

printf("\n你确定要删除吗?如是请输入 y;不是请 输入 n.\n");

x=getchar();

c=getchar();

if(c=='y'||c=='Y')

{

for(p->num;p

*p=*(p+1);

t--;

printf("系统已为你删除信息,请按任意键返 .\n");

getch(); //不回显函数,当用户按下某个字符时,函数自动读取,无需按回车

enter(); //回车

}

if(c=='n'||c=='N')

{

printf("删除信息取消!按任意键返回.\n");

getch();

enter();

}

}

void preside() //学生信息的排序

{

int i,j,k,l;

char m[20],n[2];

struct student *p; //定义指向结构体的指针p

system("cls"); //执行控制台命令cls,功能是清屏,清除所有显示的信息

printf("\n\t\t\t 学生信息排序.\n");

printf("%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-8s\n\n","学号","姓名","性别","高等数学","大学英语","C语言","平均分","总分");

for(p=stu;p

{

printf("%-8ld%-8s%-8s",p->num,p->name,p->sex);

for(j=0;j<3;j++)

printf("%-8d",p->score[j]);

printf("%-8d",p->ave);

printf("%-8d",p->sum);

printf("\n\n");

}

printf("\n\n");

printf("按总分排序:\n"); //冒泡排序

printf("%-8s%-8s%-8s%-8s\n\n","学号","姓名","性别","总分");

for(i=0;i

{

for(j=1+1;j

if(stu[i].sum

{

k = stu[i].sum; //交换总分

stu[i].sum = stu[j].sum;

stu[j].sum = k;

l = stu[i].num; //交换学号

stu[i].num = stu[j].num;

stu[j].num = l;

strcpy(m,stu[i].name); //交换姓名

strcpy(stu[i].name,stu[j].name);

strcpy(stu[j].name,m);

strcpy(n,stu[i].sex); //交换性别

strcpy(stu[i].sex,stu[j].sex);

strcpy(stu[j].sex,n);

}

}

for(j=0;j输出排好序后的学生成绩信息

{

printf("%ld\t%s\t%s\t",stu[j].num,stu[j].name,stu[j].sex);

printf("%d\t", stu[j].sum);

printf("\n\n");

}

printf("\n\n");

printf("按单科排序:\n"); //冒泡排序

printf("高等数学\n");

printf("%-8s%-8s%-8s%-8s\n\n","学号","姓名","性别","高等数学");

for(i=0;i

{

for(j = 1+1;j

if(stu[i].score[0]

{

k = stu[i].score[0]; //交换分数

stu[i].score[0] = stu[j].score[0];

stu[j].score[0] = k;

l = stu[i].num; //交换学号

stu[i].num = stu[j].num;

stu[j].num = l;

strcpy(m,stu[i].name); //交换姓名

strcpy(stu[i].name,stu[j].name);

strcpy(stu[j].name,m);

strcpy(n,stu[i].sex); //交换性别

strcpy(stu[i].sex,stu[j].sex);

strcpy(stu[j].sex,n);

}

}

for(j=0;j输出排好序后的学生成绩信息

{

printf("%ld\t%s\t%s\t",stu[j].num,stu[j].name,stu[j].sex);

printf("%d\t", stu[j].score[0]);

printf("\n\n");

}

printf("大学英语\n"); //冒泡排序

printf("%-8s%-8s%-8s%-8s\n\n","学号","姓名","性别","大学英语");

for(i=0;i

{

for(j=1+1;j

if(stu[i].score[1]

{

k = stu[i].score[1]; //交换分数

stu[i].score[1] = stu[j].score[1];

stu[j].score[1] = k;

l = stu[i].num; //交换学号

stu[i].num = stu[j].num;

stu[j].num = l;

strcpy(m,stu[i].name); //交换姓名

strcpy(stu[i].name,stu[j].name);

strcpy(stu[j].name,m);

strcpy(n,stu[i].sex); //交换性别

strcpy(stu[i].sex,stu[j].sex);

strcpy(stu[j].sex,n);

}

}

for(j=0;j输出排好序后的学生成绩信息

{

printf("%ld\t%s\t%s\t",stu[j].num,stu[j].name,stu[j].sex);

printf("%d\t", stu[j].score[1]);

printf("\n\n");

}

printf("c语言\n"); //冒泡排序

printf("%-8s%-8s%-8s%-8s\n\n","学号","姓名","性别","c语言");

for(i=0;i

{

for(j=1+1;j

if(stu[i].score[2]

{

k = stu[i].score[2]; //交换分数

stu[i].score[2] = stu[j].score[2];

stu[j].score[2] = k;

l = stu[i].num; //交换学号

stu[i].num = stu[j].num;

stu[j].num = l;

strcpy(m,stu[i].name); //交换姓名

strcpy(stu[i].name,stu[j].name);

strcpy(stu[j].name,m);

strcpy(n,stu[i].sex); //交换性别

strcpy(stu[i].sex,stu[j].sex);

strcpy(stu[j].sex,n);

}

}

for(j=0;j输出排好序后的学生成绩信息

{

printf("%ld\t%s\t%s\t",stu[j].num,stu[j].name,stu[j].sex);

printf("%d\t", stu[j].score[2]);

printf("\n\n");

}

printf("排序完成,请按任意键返回.\n");

getch(); //不回显函数,当用户按下某个字符时,函数自动读取,无需按回车

enter(); //回车

}

void fint() //查找学生信息

{

int i,j=t;

long num_a;

char a,b;

struct student *p; //定义指向结构体的指针p

system("cls"); //执行控制台命令cls,功能是清屏,清除所有显示的信息

printf("\n\t\t\t查找学生信息\n");

printf("\t\t\t 请输入要查找的学生学号:\n");

scanf("%ld",&num_a);

for(p=stu;p循环查找学号

{

j--;

if(p->num==num_a)

break; //找到结束循环

if(j==0)

{

printf("不存在该学生,请按任意键返回.\n\n");

a=getchar();

getch(); //不回显函数,当用户按下某个字符时,函数自动读取,无需按回车

enter(); //回车

}

}

printf("\n 你要查找的学生为:\n\n");

printf("%-8s%-8s%-8s%-8s%-8s%-8s%-8s%-8s\n\n","学号","姓名","性别","高等数学","大学英语","c语言","平均分","总分");

printf("%-8ld%-8s%-8s",p->num,p->name,p->sex);

for(i=0;i<3;i++)

printf("%-8d",p->score[i]);

printf("%-8d",p->ave);

printf("%-8d",p->sum);

printf("\n\n 查找完成,请按任意键返回.");

b=getchar();

getch(); //不回显函数,当用户按下某个字符时,函数自动读取,无需按回车

enter(); //回车

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服