用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. ExtAspNet应用技巧(三) - 302与Asp.Net Ajax
  2. MATLAB-M文件
  3. positionnbsp;absolutenbsp;relativenbsp;z-index
  4. Leetcode69场双周赛-第一题5960:标题首字母大写
  5. input标签加disabled属性后无法获得其value值
  6. 彻底弄懂dalvik字节码【三】
  7. Oracle中的move命令
  8. linux命令编译C语言程序
  9. ​马卡龙配色你好夏天PPT模板​
  10. 华为2018年收入超阿里腾讯总和,任正非:华为最大问题是赚钱太多
  11. Linux ubuntu 切换阿里更新源
  12. python linkedlist,LinkedList在python中的实现
  13. 框架:NHibernate学习目录
  14. UTF-8转换为GBK编码
  15. 1000款商务通用PPT模板免费下载
  16. SpringSecurity如何处理logout注销操作
  17. windows2003+apache2.2+python2.7配置django mod_wsgi
  18. CV10 图像模糊(均值、高斯、中值、双边滤波)
  19. ZZULIOJ 1790 弹珠游戏
  20. html三维查看软件,再教你一个装逼神器——蛋白质三维结构查看软件pymol

热门文章

  1. mysql表设计 不同价格_电商网站商品详情页,要能选择商品属情如大小,颜色,型号等,对应不同价格,数据库应该如何设计?...
  2. 团队执行力不够,到底是谁的错?
  3. echarts图表添加背景图片
  4. 常用希腊字母及其发音
  5. 大型云平台建设的技术方案思考
  6. httpbin的使用
  7. li标签 常用的CSS设置
  8. K站神器-搜狗举报违规站点工具(含视频教程)
  9. 高防IP是不是一定能防住DDOS攻击
  10. 服务器被DDoS攻击了怎么办?