程序设计分析的结果(分析步骤及算法图)
编程需要的数据结构及中午说明
程序设计的框图
程序设计的代码
程序运作的结果及出错原因
报告的体会与感受
实现代码:
#include <stdio.h>
#define MAX 200 //最大学生数
typedef struct
{
char name[20]; //姓名
char num[8]; //学号
int a; // 成绩1
int b; //成绩2
int c; //成绩3...
int d;
int e;
int f;
}student;
student stu[MAX]; //定义存储学生成绩结构体为全局变量
int menu()
{
/*
* function name:menu()
* function: show the menu and return a order code "choose"
*/
int choose;
printf(" 主菜单 \n");
printf("================================================\n");
printf("1、输入学生成绩\n");
printf("2、按姓名查询学生成绩\n");
printf("3、按学号查询学生成绩\n");
printf("4、打印输出学生成绩\n");
printf("0、退出系统\n");
printf("选择功能:\n");
scanf("%d", &choose); //选择功能指令
return choose;
}
int stu_num()
{
int n;
printf("请输入要输入的学生数量n:\n");
scanf("%d", &n);
return n;
}
float *average(int n)
{
/*
* 函数名:average
* 函数功能:求每个学生成绩平均值
*/
int i, sum[MAX] = { 0 }; //sum[]表示每个学生的总成绩
float ave[MAX]; //ave[]表示每个学生的平均成绩
for (i = 0; i < n; i++)
{
sum[i] += stu[i].a + stu[i].b + stu[i].c + stu[i].d + stu[i].e + stu[i].f;
}
for (i = 0; i < n; i++)
ave[i] = (double)sum[i] / 6;
return ave;
}
void Insert(int n)
{
/*
* 函数名:Insert()
* 函数功能:录入学生成绩;
*/
int i;
for (i = 0; i < n; i++)
{
printf("姓名:");
getchar();
gets(stu[i].name);
printf("学号:");
gets(stu[i].num);
printf("请输入6门成绩(用空格隔开):");
scanf("%d %d %d %d %d %d",&stu[i].a, &stu[i].b, &stu[i].c, &stu[i].d, &stu[i].e, &stu[i].f);
}
}
void FindByName(int n)
{
int i, count = 0;
char str[20]; //储存查询学生的姓名
printf("请输入查询学生的姓名:");
getchar();
gets(str); //输入查询名字
float *ave=(float *)malloc(sizeof(float)*MAX);
ave = average(n);
for (i = 0; i < n; i++)
if (strcmp(str, stu[i].name) == 0)
{
count++;
printf("姓名\t学号\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t成绩6\t平均成绩\n");
printf(" %s \t%s \t%d \t%d \t%d \t%d \t%d \t%d \t%f\n", stu[i].name,stu[i].num, stu[i].a, stu[i].b, stu[i].c, stu[i].d, stu[i].e, stu[i].f, ave[i]);
break;
}
if (count == 0)
{
printf("没有这个学号的学生成绩");
}
}
void FindByNum(int n)
{
int i,count=0;
char str_num[20]; //储存查询学生的学号
printf("请输入查询学生的学号:");
getchar();
gets(str_num); //输入查询名字
float* ave = (float*)malloc(sizeof(float) * MAX);
ave = average(n);
for (i = 0; i < n; i++)
{
if (strcmp(str_num, stu[i].num) == 0)
{
count++;
printf("姓名\t学号\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t成绩6\t平均成绩\n");
printf(" %s \t%s \t%d \t%d \t%d \t%d \t%d \t%d \t%f\n", stu[i].name,stu[i].num, stu[i].a, stu[i].b, stu[i].c, stu[i].d, stu[i].e, stu[i].f, ave[i]);
break;
}
}
}
void Print(int n)
{
int i = 0;
for (i = 0; i < n; i++)
{
printf("姓名\t学号\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t成绩6\t平均成绩\n");
printf(" %s \t%s \t%d \t%d \t%d \t%d \t%d \t%d\n", stu[i].name, stu[i].num, stu[i].a, stu[i].b, stu[i].c, stu[i].d, stu[i].e, stu[i].f);
}
}
int main()
{
int student_num;
student_num = stu_num();
while (1)
{
int choose;
choose = menu();
switch (choose)
{
case 1:
Insert(student_num);
break;
case 2:
FindByName(student_num);
break;
case 3:
FindByNum(student_num);
break;
case 4:
Print(student_num);
break;
case 0:
printf("谢谢使用\n");
system("pause");
exit();
default:
printf("输入错误,请重新输入\n");
break;
}
}
}
运行结果:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct Student{
char Name[15];
char Xuehao[9];
int GaoShu; //高等数学
int WuLi; //大学物理
int CYuYan; //C语言
int SuanFa; //算法设计
int AnZhuo; //安卓设计
int Python; //Pythoo
float ave;
}Stu;
void Menu();
void Add();
void SearchByName();
void SearchByXueHao();
void Print();
Stu *S;
int S_count = 0;
int main(){
S = (Stu*)malloc(sizeof(Stu));
int choice;
bool exit = false;
while(1){
Menu();
scanf("%d", &choice);
switch(choice){
case 1:
Add();
break;
case 2:
SearchByName();
break;
case 3:
SearchByXueHao();
break;
case 4:
Print();
break;
case 0:
printf("谢谢使用\n");
exit = true;
break;
default:
printf("输入错误,请重新输入\n\n");
}
if(exit){
break;
}
}
if(S_count == 0){
delete S;
}else{
delete[] S;
}
return 0;
}
void Menu(){
printf(" 主菜单\n");
printf("========================================\n");
printf(" 1、输入学生成绩\n");
printf(" 2、按姓名查询学生成绩\n");
printf(" 3、按学号查询学生成绩\n");
printf(" 4、打印输出学生成绩\n");
printf(" 0、退出系统\n");
printf("========================================\n");
printf(" 请选择(0-4):");
}
void Add(){
printf("请输入学生姓名:");
scanf("%s", S[S_count].Name);
printf("请输入学生学号:");
scanf("%s", S[S_count].Xuehao);
printf("请输入高等数学成绩:");
scanf("%d", &S[S_count].GaoShu);
printf("请输入大学物理成绩:");
scanf("%d", &S[S_count].WuLi);
printf("请输入C语言成绩 :");
scanf("%d", &S[S_count].CYuYan);
printf("请输入算法设计成绩:");
scanf("%d", &S[S_count].SuanFa);
printf("请输入安卓设计成绩:");
scanf("%d", &S[S_count].AnZhuo);
printf("请输入Python成绩 :");
scanf("%d", &S[S_count].Python);
S[S_count].ave = (S[S_count].GaoShu+S[S_count].WuLi+S[S_count].CYuYan+S[S_count].SuanFa+S[S_count].AnZhuo+S[S_count].Python)/6.0;
S_count++;
S = (Stu*)realloc(S, (S_count+1)*sizeof(Stu));
printf("添加完成!\n\n");
}
void SearchByName(){
if(S_count == 0){
printf("学生数据为空!\n\n");
return;
}
char Name[15];
int i;
printf("请输入姓名:");
scanf("%s", Name);
for(i = 0; i < S_count; i++){
if(strcmp(Name, S[i].Name) == 0){
break;
}
}
if(i == S_count){
printf("查无此项!\n\n");
}else{
printf("高等数学 大学物理 C语言 算法设计 安卓设计 Python 平均分\n");
printf(" %3d %3d %3d %3d %3d %3d %.2f\n\n", S[i].GaoShu, S[i].WuLi, S[i].CYuYan, S[i].SuanFa, S[i].AnZhuo, S[i].Python, S[i].ave);
}
}
void SearchByXueHao(){
if(S_count == 0){
printf("学生数据为空!\n\n");
return;
}
char XueHao[9];
int i;
printf("请输入学号:");
scanf("%s", XueHao);
for(i = 0; i < S_count; i++){
if(strcmp(XueHao, S[i].Xuehao) == 0){
break;
}
}
if(i == S_count){
printf("查无此项!\n\n");
}else{
printf("高等数学 大学物理 C语言 算法设计 安卓设计 Python 平均分\n");
printf(" %3d %3d %3d %3d %3d %3d %.2f\n\n", S[i].GaoShu, S[i].WuLi, S[i].CYuYan, S[i].SuanFa, S[i].AnZhuo, S[i].Python, S[i].ave);
}
}
void Print(){
if(S_count == 0){
printf("学生数据为空!\n\n");
return;
}
char XueHao[9];
int i;
printf("请输入学号:");
scanf("%s", XueHao);
for(i = 0; i < S_count; i++){
if(strcmp(XueHao, S[i].Xuehao) == 0){
break;
}
}
if(i == S_count){
printf("查无此项!\n\n");
}else{
printf("姓名 学号 高等数学 大学物理 C语言 算法设计 安卓设计 Python 平均分\n");
printf("%-8s %-8s %3d %3d %3d %3d %3d %3d %.2f\n\n", S[i].Name, S[i].Xuehao, S[i].GaoShu, S[i].WuLi, S[i].CYuYan, S[i].SuanFa, S[i].AnZhuo, S[i].Python, S[i].ave);
}
}
一、课程设计题目
《学生成绩管理系统》
二、课程设计要求
综合利用顺序、选择、循环等各种程序结构,使用自定义函数和二维数组,完成任务。
三、课程设计思路
3.1功能要求
该系统运行在DOS环境下,人机界面为命令行文本界面。完成的任务是对若干人的成绩信息进行管理,且数据保存到文件中。
实现的主要功能是:
系统以用户名和密码进行登录
学生信息和成绩输入功能
查询学生信息及成绩功能
打印学生信息及成绩功能
以稳健的形式进行保存
3.2 设计环境
所使用的语言采用标准C,开发工具可选用在DOS环境下的Turbo C
3.3分析问题
学生成绩管理系统的整体功能都包括:登录口令、学生成绩输入、学生成绩打印、学生成绩查询四大板块,而成绩输入有包括学号,C语言成绩,数据库成绩,网页成绩,四个模块。
(1)设计的数据对象包括整形:学号;字符型:姓名、3门课程成绩、总成绩、平均成绩。
(2)数据结构线性数据结构,定义人数上限为40.
3.4 数据结构
本系统是对学生成绩的信息进行管理,学生成绩信息采用C的结构体数据类型描述,定义如下:
struct students
{
int num; //学号-整型//
char C语言; //C语言-字符型//
char 数据库; //数据库-字符型//
char 网页; //网页-字
3.4模块设计
根据功能要求,本系统为五大主要模块,具体模块如表所示。
表 学生信息成绩管理系统的模块
main() 主控函数
void luRu(int num) 录入学生信息
void xueHaoChaXun(int num,int xueHao) 查询学生信息
void daYin (int num) 打印学生信息
四、课程流程图
五、课程设计源码
#include <stdio.h> //标准输入输出函数库
#include <stdlib.h> //标准函数库
#include <string.h> //字符串函数库
#include <conio.h> //屏幕操作函数库
#define HEADER "学号 C语言 数据库 网页\n"
#define FORMAT "%3d\t%3d\t%3d\t%3d\n"
#define N 40
int score[N][4];
int i,j;
void dengLu(); //登录函数声明
void luru();
void chengjiluru(int num);
void chengjichaxun(int num,int xueHao);
void chengjidayin (int num);
int main(void)
{
dengLu();
}
void dengLu()
{
char username[30];
char password[10];
printf("****************************************************\n");
printf("********** 学 生 成 绩 管 理 系 统 登 录 **********\n");
printf("****************************************************\n");
printf("-->请输入用户名:");
gets(username);
printf("-->请输入密码:");
gets(password);
if(strcmp(username, "JasonLi")== 0 && strcmp(password, "123456") == 0)
{
printf("欢迎登录!\n");
luru();
}
else
{
printf("-->用户名和密码错误,按任意键重试...\n");
getch();
system("cls"); //清屏
dengLu(); //递归调用dengLu
}
}
void luru()
{
int n;
int xueHao;
printf("请输入班级学生人数:");
scanf("%d",&n);
chengjiluru(n);
chengjidayin(n);
printf("请输入要查找的学号:");
scanf("%d", &xueHao);
chengjichaxun(n,xueHao);
}
void chengjiluru(int num)
{
printf("************************************\n");
printf("**** 学 生 成 绩 录 入 ****\n");
printf("************************************\n");
printf(HEADER);
for(i=0;i<num;i++)
{
printf("%3d\t",i+1);
score[i][0]=i+1;
for(j=1;j<4;j++)
scanf("%d",&score[i][j]);
}
}
void chengjichaxun(int num,int xueHao)
{
printf("************************************\n");
printf("**** 按 学 号 查 询 学 生 成 绩 ****\n");
printf("************************************\n");
for (i=0;i<num;i++)
{
if (xueHao==score[i][0]) //查找到符合条件的记录输入
{
printf(HEADER);
printf(FORMAT, score[i][0],score[i][1],score[i][2],score[i][3]);
break;
}
}
if(i==num)
{
printf("您输入的学号不存在!\n");
}
system("pause");
}
void chengjidayin (int num)
{
printf("************************************\n");
printf("**** 成 绩 打 印 ****\n");
printf("************************************\n");
printf(HEADER);
for(i=0;i<num;i++)printf(FORMAT,
score[i][0],score[i][1],score[i][2],score[i][3]);
}
六、运行界面截图