c语言课程设计
课程设计目的
- 进一步掌握和利用 C 语言进行程设计的能力;
- 进一步理解和运用结构化程设计的思想和方法;
- 初步掌握开发一个小型实用系统的基本方法;
- 学会调试一个较长程序的基本方法;
- 学会利用流程图或 N-S 图表示算法;
- 掌握书写程设计开发文档的能力(书写课程设计报告)。
随便写的一个c语言练手小Demo,基本完成了各个功能,虽然没有申请评优,但也拿了个良好(虽然才一个学分,嫌弃)。
一方面我写的这些代码没什么技术含量,另一方面这是第一次写超千行的代码,书写时也确实感受到自己打码的熟练度提升了不少。
所以也发篇博客记录一下,也以此鼓励一下自己。
课设题目:学生奖学金管理系统 什么奖学金都没涉及到😅
管理员账户密码都是123456
跑的效果图如下
源代码打包:点我
提取码:4vyv
源代码如下
/***************************************
* @FileName: Keshe.c
* @Author: Makonike
* @Version: 1.8
* @Date: 2020-12-25
* @Email: 1694585033@qq.com
* @Description: 课设-->学生奖学金管理系统
***************************************/
/*************************************************
@Function: // 函数名称
@Description: // 函数功能、性能等的描述
@Calls: // 被本函数调用的函数清单
@CalledBy: // 调用本函数的函数清单
@TableAccessed: // 被访问的表(此项仅对于牵扯到数据库操作的程序)
@TableUpdated: // 被修改的表(此项仅对于牵扯到数据库操作的程序)
@Input: // 输入参数说明,包括每个参数的作用、取值说明及参数间关系。
@Output: // 对输出参数的说明。
@Return: // 函数返回值的说明
@Others: // 其它说明
*************************************************/
#include <stdio.h> //标准库
#include <stdlib.h>
#include <string.h>
#define N 15 //NAME
#define C 10 //CLASS
#define SN 15 //STUDENT ID
#define STUDENTS_FILE "student.txt" //存放学生信息1+追加4
#define STUDENTS_RESIDUE "student1.txt" //存放删除后剩余的信息5
#define STUDENTS_CREATE "student2.txt" //存放增加后的信息6
#define STUDENTS_COPY "des.txt" //复制集成
/* 用于功能4(统计)中记录班号和每班得分 */
typedef struct scoreclac{
char tempclass[6]; // 记录班号(学号前五位)
double sum;// 每个班求和
struct scoreclac* next; // 指向下一个班求和结构体
}scc,*sccptr;
/* 核心结构体-学生个人数据 */
typedef struct Student{
char Stu_ID[SN]; // 学号
char Name[N]; // 姓名
char Class[C]; // 班级
double Math; // 高数
double English; // 英语
double Physics; // 物理
double Total_Points; // 总分
int Rank; // 名次
struct Student *next; // 指向下一个学生
}Stu,*StuPtr;
StuPtr S=NULL;// 作为链表表头,贯穿整个程序,同时用来判断初始化状态
StuPtr Entering(StuPtr S);//录入:输入数据并将链表数据存储到Student.txt
//void ShowAll(); //显示全部记录:读取Student.txt的数据建立新链表然后输出
void ShowAll(StuPtr S);//显示全部记录:输出链表内容
void Seek(StuPtr S);//查询:根据指定条件查询学生的信息
void Seek_Rank(StuPtr S);//根据名次查找学生的信息
void Seek_Class(StuPtr S);//根据班级查找学生的信息
void Seek_Class3(StuPtr S);//根据班级查找前3名学生的信息
void Seek_Score_Subject(StuPtr S,int n);//根据各学科成绩的分数区间查询学生信息
void Seek_Score_All(StuPtr S);//根据总分区间查询学生信息
void Stat(StuPtr S);//统计
void Stat1(StuPtr S);//统计总分
void Stat2(StuPtr S);//分班统计
void Del(StuPtr S);//删除:删除单个学生的信息
void DeleteAll(StuPtr S);//删除所有信息
void Add(StuPtr S);//增加:增加特定对象的信息
void Sort(StuPtr S);//排序:根据某个特征进行排序
void Sort1(StuPtr S);//根据名次进行排序
void Sort2(StuPtr S);//根据学号进行排序
void Save(StuPtr S);//保存文件
void Copy();//复制文件
void Infile(StuPtr S,const char *p,const char *pp);//录入文件
StuPtr Readfile2(const char* p);//读取文件创建链表(all)
//void Sum();//计算总分
void TeacherMenu();//教师面板
void StudentMenu();//学生面板
void LoginTeacherSystem();//管理员/教师登陆系统
int testData(StuPtr S);//测试是否录入初始化
/*************************************************
@Function: main
@Description: 显示登陆界面
@Calls: DeleteAll()、LoginTeacherSystem()、StudentMenu()
@CalledBy:
@Input:
@Return: 空类型,无返回值
@Others: 显示登陆菜单界面,通过变量option的值调用不同函数完成功能
*************************************************/
int main()
{
ErrorMenu://登陆系统输入错误处理-返回重新输入
while(1){
system("cls");
printf("\n\n ||***************************************LOGIN****************************************||\n");
printf(" || ||\n");
printf(" ||***********************STUDENT SCHOLARSHIP MANAGEMENT SYSTEM************************||\n");
printf(" || ||\n");
printf(" ||====================================================================================||\n");
printf(" || ||\n");
printf(" ||==================Welcome to Student Scholarship Management System==================||\n");
printf(" || ||\n");
printf(" ||====================================================================================||\n");
printf(" || ||\n");
printf(" ||>>>>>>>>>>>>>>>>>>>>>>>>>>>Please select the login method<<<<<<<<<<<<<<<<<<<<<<<<<<<||\n");
printf(" || ||\n");
printf(" ||====================================================================================||\n");
printf(" || ||\n");
printf(" || 1.Administrator login ||\n");
printf(" || ||\n");
printf(" || 2.Student user login ||\n");
printf(" || ||\n");
printf(" || 3.Log out ||\n");
printf(" || ||\n");
printf(" ||====================================================================================||\n");
printf(" || ||\n");
printf(" ||****************************************END*****************************************||\n");
printf(" ||->> Please input your option:");
int option; //选择变量
scanf("%d",&option);
switch(option){
case 1:
system("cls");
LoginTeacherSystem();
break;
case 2:
system("cls");
StudentMenu();
break;
case 3:
system("cls");
DeleteAll(S);
exit(0);
default:
system("cls");
printf("\n\n\n\n\n ||***********************************STUDENT USER*************************************||\n");
printf(" || ||\n");
printf(" ||====================================================================================||\n");
printf(" || ||\n");
printf(" ||>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ERROR<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<||\n");
printf(" || ||\n");
printf(" || Error!Please input 1-3 ! ||\n");
printf(" || ||\n");
printf(" ||>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ERROR<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<||\n");
printf(" || ||\n");
printf(" ||====================================================================================||\n");
printf(" || ||\n");
printf(" ||********************Please [enter] to proceed to the next step**********************||\n");
fflush(stdin);
getchar();
goto ErrorMenu;//错误处理,跳回输入
}
}
return 0;
}
/*************************************************
@Function: Entering
@Description: 录入学生信息并初始化核心链表
@Calls: Infile()
@CalledBy: TeacherMenu()
@Input: #StuPtr S: 结构体指针-储存学生信息的链表表头
@Return: #S: 正常退出,返回链表的表头指针
#NULL: 异常退出,申请空间失败,返回空
@Others: 输入的数据从链表头链接入链表
*************************************************/
StuPtr Entering(StuPtr S){
char a;//用于重新进入时重复确认是否再次录入
fflush(stdin);
if(S){
//链表不为空时才执行如下代码段,这时已经初始化并录入过数据了
Error_re_entry:
system("cls");
printf("\n\n ||****************************************MENU****************************************||\n");
printf(" || ||\n");
printf(" ||************************************** USER ****************************************||\n");
printf(" || ||\n");
printf(" ||====================================================================================||\n");
printf(" || ||\n");
printf(" ||>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Please enter your choice<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<||\n");
printf(" || ||\n");
printf(" ||====================================================================================||\n");
printf(" || ||\n");
printf(" || You have entered the data as well, and re-entry will overwrite the previous data ||\n");
printf(" || ||\n");
printf(" || y/n ||\n");
printf(" || ||\n");
printf(" ||====================================================================================||\n");
printf(" || ||\n");
printf(" ||**************************************END*******************************************||\n");
printf(" ||->> Please input your option:");
fflush(stdin);
a=getchar();
if(a=='n'||a=='N'){
return S;
}else if(a=='y'||a=='Y'){
}
else{
system("cls");
printf("\n\n\n ||************************************** USER ****************************************||\n");
printf(" || ||\n");
printf(" ||====================================================================================||\n");
printf(" || ||\n");
printf(" ||>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ERROR<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<||\n");
printf(" || ||\n");
printf(" || Error!Pleas enter 'y' or 'n'! ||\n");
printf(" || ||\n");
printf(" ||>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ERROR<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<||\n");
printf(" || ||\n");
printf(" ||====================================================================================||\n");
printf(" || ||\n");
printf(" ||********************Please [enter] to proceed to the next step**********************||\n");
fflush(stdin);
a=getchar();
goto Error_re_entry;
}
}
StuPtr head=(StuPtr)malloc(sizeof(Stu)); //为表头分配空间
if(head){
//初始化
head->next=NULL;
S=head;
}else{
printf("\n\n\n\n\n||->> Can't Entering!");
return NULL;//申请空间失败,返回NULL
}
while(1){
//录入
system("cls");
StuPtr temp=(StuPtr)malloc(sizeof(Stu)); //为新节点分配空间
if(temp){
printf("\n\n\nNow please enter the member (Enter [@] in ID to end)\n");
printf("\n||->> Please enter your Student ID:");
scanf("%s",temp->Stu_ID);
if(temp->Stu_ID[0]=='@'){
// 输入学号为@时退出
free(temp);
return S;
}else{
printf("\n||->> Please enter your Name:");
scanf("%s",temp->Name);
printf("\n||->> Please enter your Class:");
scanf("%s",temp->Class);
printf("\n||->> Please enter your Score of Advanced Mathematics:");
scanf("%lf",&temp->Math);
while(temp->Math<0||temp->Math>100){
printf("\n||->> Error! Please input 0-100:");
scanf("%lf",&temp->Math);
}
printf("\n||->> Please enter your Score of College English:");
scanf("%lf",&temp->English);
while(temp->English<0||temp->English>100){
printf("\n||->> Error! Please input 0-100:");
scanf("%lf",&temp->English);
}
printf("\n||->> Please enter your Score of College physics:");
scanf("%lf",&temp->Physics);
while(temp->Physics<0||temp->Physics>100){
printf("\n||->> Error! Please input 0-100:");
scanf("%lf",&temp->Physics);
}
temp->Total_Points=0;// 总分和名次都初始化为零
temp->Rank=0;
temp->next=S->next;
S->next=temp; // 指向下一个
system("cls");
printf("\n\n\n\n\n||->> Add member successfully!");
fflush(stdin);
getchar();
if(S->next->next==NULL){
Infile(S->next,STUDENTS_FILE,"w"); //如果是第一个就覆盖,其他的就追加
}else{
Infile(S->next,STUDENTS_FILE,"a+");
}
}
}else{
printf("\n\n\n\n\n||->> Can't malloc!");
return NULL;//申请空间失败,返回NULL
}
}
return S;
}
/*************************************************
@Function: Add
@Description: 添加学生信息
@Calls: Infile()
@CalledBy: TeacherMenu()
@Input: #StuPtr S: 结构体指针-储存学生信息的链表表头
@Return: 空类型,无返回值
@Others: 添加的数据从链表头链接入链表
*************************************************/
void Add(StuPtr S){
if(!S){
printf("\n\n\n\n\n||->> You have not initialized, please try it again!");
return;
}else{
StuPtr temp = (StuPtr)malloc(sizeof(Stu));// 为新成员申请空间
if(!temp){
// 申请失败
printf("\n\n\n\n\n||->> Can't add!");
return;
}else{
printf("\n\n\n||->> Please enter your Student ID:");
scanf("%s",temp->Stu_ID);
printf("\n||->> Please enter your Name:");
scanf("%s",temp->Name);
printf("\n||->> Please enter your Class:");
scanf("%s",temp->Class);
printf("\n||->> Please enter your Score of Advanced Mathematics:");
scanf("%lf",&temp->Math);
while(temp->Math<0||temp->Math>100){
printf("\n||->> Error! Please input 0-100:");
scanf("%lf",&temp->Math);
}
printf("\n||->> Please enter your Score of College English:");
scanf