资源描述
C语言课程设计报告
Course Design reporter
课程名称 : C语言课程设计
英文名称 : Course Design of C Programming
专 业 :经济学+软件工程111
学 号 :
姓 名 :
指导教师 : 赵力
日 期: 2023年 7月12日 至2023年 7月18 日
大连交通大学软件学院
《C语言课程设计》报告
C Program Experiment Designing
课程编号: 学时: 40学时
合用专业:软件工程专业 授课单位:软件学院
一、 C语言课程设计目的及规定
目的:
根据课堂讲授内容,学生做相应的自主练习,消化课堂所讲解的内容;通过调试典型例题或习题积累调试C程序的经验;通过完毕辅导教材中的编程题,逐渐培养学生的编程能力、用计算机解决实际问题的能力。
规定:
1. 熟悉Microsoft Visual C++ 6.0 的编程环境、重要菜单功能。
2. 通过上机验证运算符、表达式、运算规则、函数使用。
3. 纯熟使用C语言的典型语句编写简朴程序。
4. 调试典型例题或习题。
5. 提高上机编程能力
二、 实验类型
设计类型
三、 实验学时
40学时
四、 实验设备
微型计算机、Windows XP操作系统、Microsoft Visual C++ 6.0 软件一套
五、 C语言课程参考教材:
[1] 李瑞,徐克圣,刘月凡,戚海英.C程序设计基础(第2版). 清华大学出版社.2023-2
[2] 梁旭,谷晓琳,黄明.C语言课程设计(第2版).人民邮电出版社,2023-8
课程设计(报告)任务书
任务及规定:
1. 设计(研究)内容和规定
研究内容:C语言课程设计题目相关内容
5个小程序都分别是什么
任务和规定:
(1)学习C语言基础知识,掌握C语言编程和程序调试的基本技能。
(2)对指导教师下达的题目进行系统分析。
(3)根据分析结果完毕系统设计。
(4)编程:在计算机上实现题目的代码实现。
(5)完毕对该系统的测试和调试。
(6)提交课程设计报告。
(7)指标:
规定完毕课程设计报告3千字以上(约二、三十页).
完毕若干综合性程序设计题目,综合设计题目的语句行数的和在300行语句以上。
2.原始依据
了解C语言的基础知识,有一定的语言编程基础,可以纯熟运用C语言进行程序设计。通过用C语言完毕的题目,提高用C语言解决实际问题的能力。
3.参考文献
[1] 李瑞,徐克圣,刘月凡,戚海英.C程序设计基础(第2版). 清华大学出版社.2023-2
[2] 梁旭,谷晓琳,黄明.C语言课程设计(第2版).人民邮电出版社,2023-8
[3] 谭浩强.C语言程序设计(第四版).北京:清华大学出版社,2023-6
2023年6月30
C语言课程设计报告 1
1.1功能说明 1
1.2 设计说明 1
1.3 程序运营截图 1
1.4源程序代码 1
2 结构体 1
2.1 功能说明 1
2.2 设计说明 2
2.3 程序运营截图 2
2.4 源程序代码 2
3指针 1
3.1 功能说明 1
3.2 设计说明 1
3.3 程序运营截图 1
3.4 源程序代码 2
4成绩管理系统 2
4.1 功能说明 2
4.2 设计说明 2
4.3 程序运营截图 3
4.4 源程序代码 3
5 主菜单 38
5.2 设计说明 38
5.3 程序运营截图 38
5.4 源程序代码 38
1.1功能说明
执行程序后,会出现菱形图案。
1.2 设计说明
函数名:a()
返回值:return,任意键返回主调函数。
1、 重要语句:for语句循环。
2、 重要思绪:通过字母之间的配合会显示出菱形图案。先设计好一行的排列,然后整体循环。
1.3 程序运营截图
1.4源程序代码
#include<iostream.h>
#include"stdio.h"
#include "string.h"
stracat (char *str,char *strt)
{ while (*str++)
str--;
while(*strt)
*str++=*strt++; *str='\0';
}
c()
{ int i,j;
char str[20],strt[20];
printf("请输入字符串1:");
gets(str);
printf("请输入字符串2:");
gets(strt);
for(i=0;str[i]!='\0';i++){
for(j=0;strt[j]!='\0';j++);}
printf("字符串1的长度为:%d",i);
printf("\n字符串2的长度为:%d\n",j);
if(j>i) { strcat(str,strt);printf("%s\n\n",str);}
if(j<=i)
{strcat(strt,str);printf("%s\n\n",strt);}
printf("Please press any key to return the menu...");
printf("\n");
getch();
system("cls");
return 0;
}
2 结构体
2.1 功能说明
运用结构体把不同类型的相关联的数据进行整合一个整体然后运用问号表达式进行判断比较出最大者再 用if条件判断语句进行进一步的比较最后输出。
2.2 设计说明
函数名:b()
返回值:return,任意键返回主调函数。
解决流程:
环节一:定义结构体类型struct student,包含四个成员。
环节二:在main函数中使用struct student定义了三个结构体变量司“stu1,stu2,stu3”并进行初始化。
环节三: 定义四个实型变量,引用结构体中stu..score 运用问号表达式求出最大者。
环节四:运用if循环近一步分别比较此外两者的大小然后分别按名次输出来。
2.3 程序运营截图
2.4 源程序代码
#include <stdio.h>
#include <conio.h>
struct student
{ long num;
char name[10];
char sex;
float score;
};
b()
{ struct student stu1={111100,"李华",'M',90};
struct student stu2={111101,"郑红",'F',93};
struct student stu3={111102,"张强",'M',94};
float d,e,f,Max;
d=stu1.score;e=stu2.score;f=stu3.score;
Max=(d>e?d:e)>f?(d>e?d:e):f;
{if(Max==d)
{if(e>f)
{printf("第一名\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu1.num,stu1.name,stu1.sex,stu1.score);
printf("第二名\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu2.num,stu2.name,stu2.sex,stu2.score);
printf("第三名\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu3.num,stu3.name,stu3.sex,stu3.score);}
else if (e==f)
{printf("第一名\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu1.num,stu1.name,stu1.sex,stu1.score);
printf("第二名\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu3.num,stu3.name,stu3.sex,stu3.score);
printf("并列第二名\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu2.num,stu2.name,stu2.sex,stu2.score);}
else
{printf("第一名\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu1.num,stu1.name,stu1.sex,stu1.score);
printf("第二名\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu3.num,stu3.name,stu3.sex,stu3.score);
printf("第三名\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu2.num,stu2.name,stu2.sex,stu2.score);}
}
if(Max==e)
{ if (d>f)
{printf("第一名\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu2.num,stu2.name,stu2.sex,stu2.score);
printf("第二名\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu1.num,stu1.name,stu1.sex,stu1.score);
printf("第三名\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu3.num,stu3.name,stu3.sex,stu3.score);}
else if(d==f)
{printf("第一名\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu2.num,stu2.name,stu2.sex,stu2.score);
printf("第二名是\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu1.num,stu1.name,stu1.sex,stu1.score);
printf("并列第二名\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu3.num,stu3.name,stu3.sex,stu3.score);}
else
{printf("第一名\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu2.num,stu2.name,stu2.sex,stu2.score);
printf("第二名\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu3.num,stu3.name,stu3.sex,stu3.score);
printf("第三名\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu1.num,stu1.name,stu1.sex,stu1.score);}
}
if(Max==f)
{if (d>e)
{printf("第一名\nNo3.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu3.num,stu3.name,stu3.sex,stu3.score);
printf("第二名\nNo1.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu1.num,stu1.name,stu1.sex,stu1.score);
printf("第三名\nNo2.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu2.num,stu2.name,stu2.sex,stu2.score);}
else if(d==e)
{printf("第一名\nNo3.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu3.num,stu3.name,stu3.sex,stu3.score);
printf("第二名\nNo1.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu1.num,stu1.name,stu1.sex,stu1.score);
printf("并列第二\nNo2.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu2.num,stu2.name,stu2.sex,stu2.score);}
else
{printf("第一名\nNo3.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu3.num,stu3.name,stu3.sex,stu3.score);
printf("第二名\nNo2.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu2.num,stu2.name,stu2.sex,stu2.score);
printf("第三名\nNo1.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu1.num,stu1.name,stu1.sex,stu1.score);}
}
}
printf("Please press any key to return the menu...");
printf("\n");
getch();
printf("\n");
system("cls");
return 0;
}
3指针
3.1 功能说明
输入两个字符串,分别计算出其长度,并比较其大小,且把大的连接到小的后面形成一个字符串
3.2 设计说明
函数名:c()
返回值:return,任意键返回主调函数。
具体流程
环节一:在被调函数中运用while循环下运用指针地址的可加性来依次取strt相应的地址赋给str,最后又把str的地址指向开始的第一个字母。
环节二:在主调函数中,先定义两个字符数组变量,然后用两个gets函数分别接受输入的字符串,然后运用f两个or循环分别计算出字符串的长度i和j。
环节三:运用if函数比较其大小,并求出大的然后把已输入的两个字符串str和strt作为调用函数的实参去被调函数完毕长度的字符串连接到长度小的后面,最后输出连接好的字符串。
3.3 程序运营截图
3.4 源程序代码
#include<iostream.h>
#include"stdio.h"
#include "string.h"
stracat (char *str,char *strt)
{ while (*str++)
str--;
while(*strt)
*str++=*strt++; *str='\0';
}
c()
{ int i,j;
char str[20],strt[20];
printf("请输入字符串1:");
gets(str);
printf("请输入字符串2:");
gets(strt);
for(i=0;str[i]!='\0';i++){
for(j=0;strt[j]!='\0';j++);}
printf("字符串1的长度为:%d",i);
printf("\n字符串2的长度为:%d\n",j);
if(j>i) { strcat(str,strt);printf("%s\n\n",str);}
if(j<=i)
{strcat(strt,str);printf("%s\n\n",strt);}
printf("Please press any key to return the menu...");
printf("\n");
getch();
system("cls");
return 0;
}
4成绩管理系统
4.1 功能说明
学生个人信息修改,老师信息管理授课信息查询,成绩信息查询和管理,
4.2 设计说明
如进行学生信息修改
(输入):3
输入 学号11182200
密码 1234
(输入):1进入信息修改
(输入)要修改的姓名 韩天元
性别 男
生日:1993年1月1日
登录密码:1234
居住地址:辽宁大连
输入相应的功能号:NULL
然后完毕信息修改!
4.3 程序运营截图
4.4 源程序代码
/**
C语言课程设计题目源程序: 成绩管理系统
系统规定: 包含三类用户,管理员,教师,学生
管理员功能:
(1)自身密码修改
(2)教师信息管理:添加,修改,查询,删除
(3)学生信息管理:添加,修改,查询,删除
(4)成绩信息管理:添加,修改,查询,删除
(5)课程信息管理:添加,修改,查询,删除
(6)授课信息管理:添加,修改,查询,删除
(7)退出登陆系统
教师功能:
(1)个人信息修改
(2)学生信息管理: 只能查看学生的信息
(3)成绩信息管理: 添加,修改,删除(只限该老师所授课程),查询(所有学生成绩)
(4)退出登陆系统
学生功能:
(1)个人信息修改
(2)成绩信息管理: 只能查询自己的成绩
(3)退出登陆系统
**************************************************
程序作者:韩建平
***************************************************
**/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ADMIN_USER_TYPE 1
#define TEACHER_USER_TYPE 2
#define STUDENT_USER_TYPE 3
#define FUNCTION_FAILED -1
#define FUNCTION_SUCCESS 0
/** 管理员身份信息表 **/
typedef struct AdminInfo {
char adminName[20]; //管理员帐号,主键
char password[20]; //管理员密码
struct AdminInfo *next; //指向下一个管理员信息
} AdminInfo;
/** 教师信息表 **/
typedef struct TeacherInfo {
char teacherId[20]; //教工号,主键
char teacherPassword[20]; //教师登陆密码
char teacherName[20]; //教师姓名
char teacherSex[4]; //教师性别
char teacherBirthTime[15]; //教师生日
char teacherAddress[50]; //教师居住地址
struct TeacherInfo *next; //指向下一个教师的信息
} TeacherInfo;
/** 学生信息 **/
typedef struct StudentInfo {
char studentNumber[20]; //学号,主键
char studentName[10]; //姓名
char studentPassword[20]; //学生登陆密码
char studentSex[4]; //学生性别
char studentBirthTime[15]; //学生生日
char studentAddress[50]; //学生居住地址
struct StudentInfo *next; //指向下一个学生的信息
} StudentInfo;
/** 课程信息 **/
typedef struct CourseInfo {
int courseId; //课程编号,主键
char courseName[20]; //课程名称
char courseClassroom[20]; //上课所在教室
char courseTime[20]; //上课时间
struct CourseInfo *next; //指向下一门课程的信息
} CourseInfo;
/** 授课信息 **/
typedef struct CourseTeachInfo {
int courseId; //课程编号
char teacherId[20]; //教师编号
struct CourseTeachInfo *next; //指向下一条教师授课信息
} CourseTeachInfo;
/** 学生成绩信息 **/
typedef struct ScoreInfo {
char studentNumber[20]; //学生学号
int courseId; //课程编号
float score; //课程成绩
struct ScoreInfo *next; //指向下一条成绩信息
} ScoreInfo;
static AdminInfo *pAdminInfoHead = NULL; //指向系统管理员信息记录的头指针
static CourseInfo *pCourseInfoHead = NULL; //指向课程信息记录的头指针
static CourseTeachInfo *pCourseTeachInfoHead = NULL; //指向教师授课信息记录的头指针
static ScoreInfo *pScoreInfoHead = NULL; //指向成绩记录信息的头指针
static StudentInfo *pStudentInfoHead = NULL; //指向学生信息记录的头指针
static TeacherInfo *pTeacherInfoHead = NULL; //指向教师信息记录的头指针
static char currentUserName[20]; /*保存登陆系统的当前帐号*/
static char currentUserType[20]; /*保存登陆系统的身份*/
void InitSystem(); /*初始化系统函数,向各种信息链表中加入测试数据*/
int AddAdminInfo(AdminInfo *); /*向管理员信息链表中加入一条管理员信息*/
int AddOneCourseInfo(CourseInfo *); /*向课程信息链表中加入一条课程信息*/
int AddOneTeacherInfo(TeacherInfo *); /*向教师信息链表中加入一条教师信息*/
int AddOneStudentInfo(StudentInfo *); /*向学生信息链表中加入一条学生信息*/
int AddOneCourseTeachInfo(CourseTeachInfo *);/*向授课信息链表中加入一条授课信息*/
int AddOneScoreInfo(ScoreInfo *); /*向成绩链表中加入一条成绩信息*/
void GetStudentName(char *,char *); /*得到某个学号的学生姓名*/
void GetCourseName(int,char *); /*得到某门课程编号的名称*/
void GetTeacherName(char *,char *); /*根据教师编号得到教师姓名*/
bool IsHavingStudentNumber(char *); /*判断是否存在某个学号的学生信息*/
bool IsHavingCourseId(int ); /*判断是否存在某门课程的信息*/
bool IsHavingTeacherId(char *); /*判断是否存在某个教师信息*/
bool CanTeacherOpeScore(int ,char *); /*判断某个老师是否有添加某门课程成绩的权限*/
bool IsCourseInTeachInfo(int ); /*判断某门课程是否在授课信息中存在*/
bool IsCourseInScoreInfo(int ); /*判断某门课程是否在成绩信息中存在*/
void ShowWelcomeMenu(); /*显示系统欢迎菜单*/
int AdminLogin(); /*管理员身份登陆系统*/
int TeacherLogin(); /*教师身份登陆系统*/
int StudentLogin(); /*学生身份登陆系统*/
void SelectLoginType(); /*选择登陆系统的身份*/
void ShowAdminMenu(); /*显示管理员操作菜单*/
void AdminPasswordModify(); /*管理员修改自己的密码*/
void TeacherInfoManage(); /*教师信息管理*/
void TeacherInfoView(); /*教师信息查看*/
void TeacherInfoAdd(); /*教师信息添加*/
void TeacherInfoModify(); /*教师信息修改*/
void TeacherInfoDelete(); /*教师信息删除*/
void StudentInfoManage(); /*学生信息管理*/
/*学生信息查看功能同教师身份登陆时的学生信息查看同样*/
void StudentInfoAdd(); /*学生信息添加*/
void StudentInfoModify(); /*学生信息修改*/
void StudentInfoDelete(); /*学生信息删除*/
void Admin_ScoreInfoManage(); /*管理员对成绩信息管理*/
void ScoreInfoView(); /*成绩信息查看*/
void ScoreInfoAdd(); /*成绩信息添加*/
void ScoreInfoModify(); /*成绩信息修改*/
void ScoreInfoDelete(); /*成绩信息删除*/
void CourseInfoManage(); /*课程信息管理*/
void CourseInfoView(); /*课程信息查看*/
void CourseInfoAdd(); /*课程信息添加*/
void CourseInfoModify(); /*课程信息修改*/
void CourseInfoDelete(); /*课程信息删除*/
void CourseTeachInfoManage(); /*授课信息管理*/
void CourseTeachInfoView(); /*授课信息查看*/
void CourseTeachInfoAdd(); /*授课信息添加*/
void CourseTeachInfoModify(); /*授课信息修改*/
void CourseTeachInfoDelete(); /*授课信息删除*/
void ShowTeacherMenu(); /*显示教师身份操作菜单*/
void TeacherSelfInfoModify(); /*教师信息修改*/
void StudentInfoView(); /*学生信息查看*/
void Teacher_ScoreInfoManage(); /*教师对成绩信息管理*/
void ScoreInfoView(); /*成绩信息查看*/
void ScoreInfoAdd(); /*成绩信息添加*/
void ScoreInfoModify(); /*成绩信息修改*/
void ScoreInfoDelete(); /*成绩信息删除*/
void ShowStudentMenu(); /*显示学生身份操作菜单*/
void StudentSelfInfoModify(); /*学生个人信息修改*/
void Student_ScoreInfoView(); /*学生本人成绩查询*/
void InitSystem() { /*初始化系统函数,向各种信息链表中加入测试数据*/
AdminInfo adminInfo; /*初始化一个管理员信息*/
strcpy(adminInfo.adminName,"admin");
strcpy(adminInfo.password,"admin");
adminInfo.next = NULL;
AddAdminInfo(&adminInfo); /*将这个管理员信息加入到管理员信息链表中*/
CourseInfo courseInfo[3]; /*初始化三门课程信息*/
strcpy(courseInfo[0].courseClassroom,"6A-101");
strcpy(courseInfo[1].courseClassroom,"6A-102");
strcpy(courseInfo[2].courseClassroom,"6A-103");
strcpy(courseInfo[0].courseName,"计算机网络");
strcpy(courseInfo[1].courseName,"毛泽东思想");
strcpy(courseInfo[2].courseName,"C语言程序设计");
strcpy(courseInfo[0].courseTime,"星期一上午一二节课");
strcpy(courseInfo[1].courseTime,"星期五下午三四节课");
strcpy(courseInfo[2].courseTime,"星期三晚上三节课");
courseInfo[0].next = courseInfo[1].next = courseInfo[2].next = NULL;
for(int i=0;i<3;i++) AddOneCourseInfo(&courseInfo[i]);
TeacherInfo teacherInfo[3]; /*初始化三个教师信息*/
strcpy(teacherInfo[0].teacherId,"TH001");
strcpy(teacherInfo[1].teacherId,"TH002");
strcpy(teacherInfo[2].teacherId,"TH003");
strcpy(teacherInfo[0].teacherName,"汪老师");
strcpy(teacherInfo[1].teacherName,"梁老师");
strcpy(teacherInfo[2].teacherName,"李老师");
strcpy(teacherInfo[0].teacherPassword,"TH001");
strcpy(teacherInfo[1].teacherPassword,"TH002");
strcpy(teacherInfo[2].teacherPassword,"TH003");
strcpy(teacherInfo[0].teacherSex,"男");
strcpy(teacherInfo[1].teacherSex,"女");
strcpy(teacherInfo[2].teacherSex,"男");
strcpy(teacherInfo[0].teacherBirthTime,"1975年3月12日");
strcpy(teacherInfo[1].teacherBirthTime,"1980年7月5日");
strcpy(teacherInfo[2].teacherBirthTime,"1978年1月17日");
strcpy(teacherInfo[0].teacherAddress,"四川成都");
strcpy(teacherInfo[1].teacherAddress,"湖南长沙");
strcpy(teacherInfo[2].teacherAddress,"云南昆明");
teacherInfo[0].next = teacherInfo[1].next = teacherInfo[2].next = NULL;
for(i=0;i<3;i++) AddOneTeacherInfo(&teacherInfo[i]);
StudentInfo studentInfo[3]; /*初始化三个学生信息*/
strcpy(studentInfo[0].studentAddress,"辽宁大连");
strcpy(studentInfo[1].studentAddress,"辽宁大连");
strcpy(studentInfo[2].studentAddress,"辽宁大连");
strcpy(studentInfo[0].studentBirthTime,"1993年3月1日");
strcpy(studentInfo[1].studentBirthTime,"1993年3月1日");
strcpy(studentInfo[2].studentBirthTime,"1993年1月1日");
strcpy(studentInfo[0].studentName,"韩田园");
strcpy(studentInfo
展开阅读全文