用C语言+EasyX写学生成绩管理系统

从一个啥也不会,只会在控制台黑框框里写简单的C,然后为了完成学生成绩管理系统课程设计作业,从0开始学习Easy X,最后写成能上交的作业。所以想在这里做个总结,也为后来者提供点思路。下面直接先看看效果吧。

 主界面

 成绩录入界面

若学号重复则提示

 成绩查询界面:可以通过姓名或学生学号查询

若没有查询到,则提示查无此人

 成绩修改界面:可以通过姓名或学生学号修改

 成绩删除界面:可以通过姓名或学生学号删除

若查询到后会提示是否确认删除

若查询不到,则提示查无此人

 成绩打印界面:打印所有的学生信息和成绩

下面附上代码

#define _CRT_SECURE_NO_WARNINGS //一些老函数报错
#include<stdio.h>
#include<stdlib.h>
#include<graphics.h> //Easyx的图形库头文件
#include<string.h>
#include<ctype.h>//检测字符int nowstu_num = 0;//当前学生人数typedef struct Student
{char s_Num[30];//学号char s_Name[30];//姓名char s_computer[30]; //计char s_Math[30];//数
}Student;//创建学生结构体数组
Student s[30];void SaveInfor();
void ReadInfor();
void Showall();
void InputInfor();
void ModiInfor();
void PrintUI();
void Dele();
void Printfind();
void SaveInforModi();//定义按钮的大小数组
int R[] = { 150,50,650,150 };
int r1[] = { 200,200,600,250 };
int r2[] = { 200,270,600,320 };
int r3[] = { 200,340,600,390 };
int r4[] = { 200,410,600,460 };
int r5[] = { 200,480,600,530 };
int r6[] = { 200,550,600,600 };//主菜单
void menu()
{//进入程序就读取数据,获取当前nowstu_numReadInfor();initgraph(800, 620);//界面大小//鼠标操作1ExMessage m1;cleardevice();//背景图IMAGE img;loadimage(&img, "C:\\Users\\86182\\source\\repos\\学生成绩管理系统2.0\\Camera Roll\\file.jpg", 800, 620);putimage(0, 0, &img);setbkmode(TRANSPARENT);setfillcolor(WHITE);fillrectangle(r1[0], r1[1], r1[2], r1[3]);//画矩形,即按钮fillrectangle(r2[0], r2[1], r2[2], r2[3]);fillrectangle(r3[0], r3[1], r3[2], r3[3]);fillrectangle(r4[0], r4[1], r4[2], r4[3]);fillrectangle(r5[0], r5[1], r5[2], r5[3]);fillrectangle(r6[0], r6[1], r6[2], r6[3]);RECT R1 = { R[0],R[1],R[2],R[3] };//矩形指针R1,方便后面在里面写字,不用计算字的位置RECT R2 = { r1[0],r1[1],r1[2],r1[3] };RECT R3 = { r2[0],r2[1],r2[2],r2[3] };RECT R4 = { r3[0],r3[1],r3[2],r3[3] };RECT R5 = { r4[0],r4[1],r4[2],r4[3] };RECT R6 = { r5[0],r5[1],r5[2],r5[3] };RECT R7 = { r6[0],r6[1],r6[2],r6[3] };LOGFONT f;                          //字体样式指针gettextstyle(&f);                 //获取字体样式f.lfHeight = 60;_tcscpy(f.lfFaceName, _T("宋体")); //宋体f.lfQuality = ANTIALIASED_QUALITY;  // 抗锯齿 settextstyle(&f);                   // 设置字体样式setbkmode(TRANSPARENT);             //字体背景透明settextcolor(BLACK);drawtext("学生成绩管理系统", &R1, DT_CENTER | DT_VCENTER | DT_SINGLELINE);//在矩形区域R1内输入文字,水平居中,垂直居中,单行显示drawtext("成绩录入", &R2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);drawtext("成绩查询", &R3, DT_CENTER | DT_VCENTER | DT_SINGLELINE);drawtext("成绩修改", &R4, DT_CENTER | DT_VCENTER | DT_SINGLELINE);drawtext("成绩删除", &R5, DT_CENTER | DT_VCENTER | DT_SINGLELINE);drawtext("成绩打印", &R6, DT_CENTER | DT_VCENTER | DT_SINGLELINE);drawtext("退出系统", &R7, DT_CENTER | DT_VCENTER | DT_SINGLELINE);//进入主界面选项操作界面while (1){m1 = getmessage();//获取鼠标操作if (m1.x > r1[0] && m1.x < r1[2] && m1.y>r1[1] && m1.y < r1[3]) {setlinecolor(RED);rectangle(r1[0], r1[1], r1[2], r1[3]);if (m1.message == WM_LBUTTONDOWN){InputInfor();//录入}}else if (m1.x >= r2[0] && m1.x <= r2[2] && m1.y >= r2[1] && m1.y <= r2[3]) {setlinecolor(RED);rectangle(r2[0], r2[1], r2[2], r2[3]);if (m1.message == WM_LBUTTONDOWN){Printfind();//查询}}else if (m1.x >= r3[0] && m1.x <= r3[2] && m1.y >= r3[1] && m1.y <= r3[3]) {setlinecolor(RED);rectangle(r3[0], r3[1], r3[2], r3[3]);if (m1.message == WM_LBUTTONDOWN){ModiInfor();//修改}}else if (m1.x >= r4[0] && m1.x <= r4[2] && m1.y >= r4[1] && m1.y <= r4[3]) {setlinecolor(RED);rectangle(r4[0], r4[1], r4[2], r4[3]);if (m1.message == WM_LBUTTONDOWN) {Dele();//删除}}else if (m1.x >= r5[0] && m1.x <= r5[2] && m1.y >= r5[1] && m1.y <= r5[3]) {setlinecolor(RED);rectangle(r5[0], r5[1], r5[2], r5[3]);if (m1.message == WM_LBUTTONDOWN) {Showall();//打印}}else if (m1.x >= r6[0] && m1.x <= r6[2] && m1.y >= r6[1] && m1.y <= r6[3]) {setlinecolor(RED);rectangle(r6[0], r6[1], r6[2], r6[3]);if (m1.message == WM_LBUTTONDOWN) {closegraph();//退出}}else {setlinecolor(WHITE);rectangle(r1[0], r1[1], r1[2], r1[3]);rectangle(r2[0], r2[1], r2[2], r2[3]);rectangle(r3[0], r3[1], r3[2], r3[3]);rectangle(r4[0], r4[1], r4[2], r4[3]);rectangle(r5[0], r5[1], r5[2], r5[3]);rectangle(r6[0], r6[1], r6[2], r6[3]);}}}//录入信息
void InputInfor()
{//通过循环来检查是否有重复的//输入学号while (1){InputBox(s[nowstu_num].s_Num, 9, "请输入该学生的学号");int FlagInput2 = 0;//计算输入的字符串长度int nums = strlen(s[nowstu_num].s_Num);if (FlagInput2 == 0){//判断是否输入重复int FlagInput1 = 0;for (int i = 0; i < nowstu_num; i++){if (strcmp(s[nowstu_num].s_Num, s[i].s_Num) == 0){FlagInput1 = 1;}}if (FlagInput1 == 1){HWND hwndInput1 = GetHWnd();int isok = MessageBox(hwndInput1, "该学生已经存在,请重新输入", "提示", MB_OK);}if (FlagInput1 == 0){break;}}}InputBox(s[nowstu_num].s_Name, 10, "请输入该学生的姓名");InputBox(s[nowstu_num].s_Math, 4, "请输入该学生的数学成绩");InputBox(s[nowstu_num].s_computer, 4, "请输入该学生的计算机成绩");SaveInfor();//保存数据
}//保存数据到文件中
void SaveInfor()
{//如果学号和姓名都不是空的才写入文件if (strlen(s[nowstu_num].s_Num) != 0 && strlen(s[nowstu_num].s_Name) != 0){FILE* fp = fopen("StudentInfo.txt", "a");//追加if (fp == NULL){return;}fprintf(fp, "%s\t%s\t%s\t%s\n",s[nowstu_num].s_Num,s[nowstu_num].s_Name,s[nowstu_num].s_Math,s[nowstu_num].s_computer);fclose(fp);//保存完毕人数++nowstu_num++;}
}
//读取文件中的信息
void ReadInfor()
{FILE* fp = fopen("StudentInfo.txt", "r");if (fp == NULL){return;}//将文件中的数据读取到当前的结构体数组中for (int i = 0; i < 15; i++){fscanf(fp, "%s\t%s\t%s\t%s\t\n",s[i].s_Num,s[i].s_Name,s[i].s_computer,s[i].s_Math);}int FileStudentNums = 0;//读取出文件中数据的人数个数for (int j = 0; j < 15; j++){if (strlen(s[j].s_Name) != 0){nowstu_num = ++FileStudentNums;}}fclose(fp);
}int cha()//查找
{char Input[30];InputBox(Input, 10, "请输入学生的姓名或学号");for (int k = 0; k < nowstu_num; k++){if (strcmp(s[k].s_Name, Input) == 0 || strcmp(s[k].s_Num, Input) == 0)//两个字符串相等{return k;}}return -1;
}void PrintUI(int q)//输出成绩界面
{ExMessage m2;initgraph(640, 480);IMAGE img1;loadimage(&img1, "C:\\Users\\86182\\source\\repos\\学生成绩管理系统2.0\\Camera Roll\\file.jpg", 640, 480);putimage(0, 0, &img1);setfillcolor(WHITE);fillrectangle(300, 380, 380, 410);setbkmode(TRANSPARENT);settextcolor(BLACK);settextstyle(20, 0, "黑体");outtextxy(40, 100, "学号");outtextxy(200, 100, "姓名");outtextxy(300, 100, "计算机");outtextxy(380, 100, "数学");outtextxy(320, 380, "返回");outtextxy(40, 140, s[q].s_Num);outtextxy(200, 140, s[q].s_Name);outtextxy(300, 140, s[q].s_computer);outtextxy(380, 140, s[q].s_Math);while (1) {m2 = getmessage();if (m2.x > 300 && m2.x < 380 && m2.y>380 && m2.y < 410) {setlinecolor(RED);rectangle(300, 380, 380, 410);}else {setlinecolor(WHITE);rectangle(300, 380, 380, 410);}if (m2.message == WM_LBUTTONDOWN) {menu();//返回到主菜单}}
}void Printfind()//调用cha()
{int fan1 = cha();//返回值if (fan1 == -1)//没找到{//获取窗口句柄HWND hndtipsF = GetHWnd();int isok = MessageBox(hndtipsF, "查无此人!", "提示", MB_OK);}else{PrintUI(fan1);}
}void ModiInfor()
{int fan2 = cha();//返回值if (fan2 == -1)//没找到{HWND hndtipsM = GetHWnd();//获取窗口句柄int isok = MessageBox(hndtipsM, "查无此人!", "提示", MB_OK);}else//找到{while (1){char modi[30];InputBox(modi, 9, "请输入需要修改的学生的学号");if (strcmp(modi, s[fan2].s_Num) == 0)//输入的学号与原来的学号相同{break;}else//不同{int flag = 0;int nums = strlen(modi);for (int i = 0; i < nowstu_num; i++){if (strcmp(modi, s[i].s_Num) == 0){flag = 1;break;}}if (flag == 1){HWND hwndInput4 = GetHWnd();int isok = MessageBox(hwndInput4, "该学生已经存在,请重新输入", "提示", MB_OK);}else if (flag == 0){memcpy(s[fan2].s_Num, modi, nums);//把新输入的学号复制到学生信息数组break;}}}InputBox(s[fan2].s_Name, 8, "请输入该学生的姓名");InputBox(s[fan2].s_computer, 10, "请输入该学生的计算机成绩");InputBox(s[fan2].s_Math, 10, "请输入该学生的数学成绩");}SaveInforModi();
}void Dele()
{int dele = cha();if (dele == -1)//没找到{HWND hndtipsD = GetHWnd();int isok = MessageBox(hndtipsD, "查无此人!", "提示", MB_OK);}else{HWND hndtipsDS = GetHWnd();int isok = MessageBox(hndtipsDS, "确定删除?", "提示", MB_OKCANCEL);if (isok == IDOK){//确定删除操作//将这个元素的后一个依次迁移for (int n = dele; n < nowstu_num; n++){s[n] = s[n + 1];}nowstu_num--;//更新到文件中SaveInforModi();//对文件进重写}else if (isok == IDCANCEL){}}
}void SaveInforModi()
{//先删掉remove("StudentInfo.txt");FILE* fp = fopen("StudentInfo.txt", "a");if (fp == NULL){return;}//再重写for (int i = 0; i < nowstu_num; i++){if (strlen(s[i].s_Num) != 0 && strlen(s[i].s_Name) != 0){fprintf(fp, "%s\t%s\t%s\t%s\n",s[i].s_Num,s[i].s_Name,s[i].s_computer,s[i].s_Math);}}fclose(fp);
}void Showall() //打印所以成绩
{ExMessage m3;initgraph(640, 480);IMAGE img2;loadimage(&img2, "C:\\Users\\86182\\source\\repos\\学生成绩管理系统2.0\\Camera Roll\\file.jpg", 640, 480);putimage(0, 0, &img2);setfillcolor(WHITE);fillrectangle(300, 430, 380, 460);setbkmode(TRANSPARENT);settextcolor(BLACK);settextstyle(20, 0, "黑体");outtextxy(40, 20, "学号");outtextxy(200, 20, "姓名");outtextxy(300, 20, "计算机");outtextxy(380, 20, "数学");outtextxy(320, 440, "返回");//返回按钮for (int q = 0;q <= nowstu_num;q++) {outtextxy(40, 60 + q * 20, s[q].s_Num);outtextxy(200, 60 + q * 20, s[q].s_Name);outtextxy(300, 60 + q * 20, s[q].s_computer);outtextxy(380, 60 + q * 20, s[q].s_Math);}while (1) {m3 = getmessage();if (m3.x > 300 && m3.x < 430 && m3.y>380 && m3.y < 460) {setlinecolor(RED);rectangle(300, 430, 380, 460);}else {setlinecolor(WHITE);rectangle(300, 430, 380, 460);}if (m3.message == WM_LBUTTONDOWN) {menu();//返回主菜单}}}int main(void)//主函数调用
{menu();return 0;
}

如果对你有一定的帮助,记得点赞收藏啊!!

用EasyX写成绩管理系统相关推荐

  1. C语言实现学生成绩管理系统(EasyX图形界面)

    本文首发于2021年7月18日19:21:06. 注意:直接复制代码会无法运行,因为没有资源文件(图片.文本文件),从下面的github链接或交流群中下载代码或注释指定代码,有关此问题,例如:无法运行 ...

  2. c语言用链表实现成绩管理系统,C语言写的学生成绩管理系统(链表)

    <C语言写的学生成绩管理系统(链表)>由会员分享,可在线阅读,更多相关<C语言写的学生成绩管理系统(链表)(6页珍藏版)>请在人人文库网上搜索. 1.include#inclu ...

  3. C# 驾校学员驾考成绩管理系统(手把手教你写)

    C# 驾校学员驾考成绩管理系统 前言 所用软件 萌新教程 一些废话,自行跳过(水论文可以抄) 课题描述 未完待续 代码 登录界面 前端default.aspx 数据库SQL server 后端defa ...

  4. c语言链表按成绩区间查询,C语言写的学生成绩管理系统(链表)

    <C语言写的学生成绩管理系统(链表)>由会员分享,可在线阅读,更多相关<C语言写的学生成绩管理系统(链表)(8页珍藏版)>请在人人文库网上搜索. 1.include#inclu ...

  5. 学生成绩信息管理系统c语言,C语言写的学生成绩管理系统V4.0

    学生成绩管理系统V4.0 学生成绩管理系统软件主要适用于成绩管理!这款软件具有成绩输入.各班成绩汇总分析.成绩打印.成绩综合排名等一系列功能.这款软件完全根据学校平常的学生成绩管理办法研发出来.运用先 ...

  6. c语言成绩管理系统答辩问题,我写的成绩管理系统出了什么问题???

    /* Note:Your choice is C IDE */ #include "stdio.h" #include "stdlib.h" #define M ...

  7. mysql c语言写学生成绩管理系统,学生成绩管理系统C++实现代码

    本文实例为大家分享了C++学生成绩管理系统的具体代码,供大家参考,具体内容如下 * (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学 ...

  8. c语言实现学生二科成绩的单链表,c++链表实现学生成绩管理系统(简易版)

    #include using namespace std; typedef struct student{ int id;//学号 string sex; string name; int cpp;/ ...

  9. java开发的简易学生成绩管理系统

    经过1个月的紧张学习和应用,终于做出了这个简易的学生成绩管理系统. 代码如下(仅供参考学习) view包下的菜单 package com.xujulong.www.view: import java. ...

最新文章

  1. 史上最全的高可用服务系统线上问题排查工具单(一)
  2. [转]项目经理面试指南
  3. Caching Best Practices--reference
  4. zcmu1710(dp)
  5. 攻防世界-web-ics-04-从0到1的解题历程writeup
  6. Samba服务器的安装配置【十全十美】
  7. 【NOI2013】向量内积【随机化】
  8. HOJ 13828 Funfair
  9. 高并发系统三大利器之缓存
  10. CVPR 2020 论文大盘点-光流篇
  11. wxpython使窗口重新显示_wxpython刷新窗口按按钮
  12. NLP预训练家族 | Text-To-Text范式统一NLP任务
  13. Atitit 圣爱提拉克斯工作最紧张的时候 11月,圣爱提拉克斯进入了一年中工作最紧张的时候。 过去,他每个月都要撰写不少文章、与不同的人愉快地交谈,教育他们沿着圣爱提拉克斯创造的世界上最伟大的圣
  14. Obsidian使用手册
  15. AES前端flutter加密与后端java解密pad block corrupted问题
  16. 小程序分销商城的功能及分销模式是什么
  17. 常用Array对象方法详解(微信小程序)
  18. 山东农业大学考研计算机专业分数,山东农业大学研究生分数线
  19. 计算机管理 未分配磁盘,win7系统对未分配磁盘空间进行分区的操作方法
  20. Bagging和Boosting(偏差与方差)

热门文章

  1. (1)接口自动化之openpyxl操作excel
  2. 华为nova3 计算机,荣耀v10与华为nova3区别对比
  3. 方舟手游修改服务器难度,《方舟生存进化》手机版难度怎么选 方舟生存进化手机版难度选择攻略...
  4. 开启xmp1还是2_王者荣耀神秘商店暑假什么时候开启?神秘商店2020年暑假开启时间...
  5. 【3D目标检测】3D Object Detection for Autonomous Driving: A Survey
  6. STM32——TIM编码器接口
  7. 【91xcz】Win7资源管理器统一浏览样式
  8. Vue框架常用组件的快速构建项目Ctrl+c Ctrl+a Ctrl+v第十四课)
  9. 敏捷开发领域里的 Epic 以及和 User Story 的关联关系
  10. 不规则图形数格子的方法_五年级数学上方格图中不规则图形的面积计算教案.doc...