// GBK VC++2010
#define _CRT_SECURE_NO_WARNINGS// for higher version
// .rd
const char* substr[8] = { "姓名", "身份证号", "学号", "性别", "班级", "平均成绩", "专业"};
const char** oristr[1] = {substr};
// .dt
char combuf[66] = {0};
#define GRADES_MAX 50 // 最多科目数
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <Windows.h>
#include "Kaif.h"
int main()
{
unsigned long long int i, j, ii;
int ord;
FILE* flp;
PrintTheTitleMenu();
system("mode con cols=140 lines=32 ");
fff = fopen("./groups", "r");
if (!fff)
{
// 没有就自动生成这个文件
fff = fopen("./groups", "wb");
fprintf(fff, "数学\n英语\n\0");
fclose(fff);
fff = fopen("./groups", "r");
}
if (!fff)
{
puts("没有权限读写文件!");
system("pause");
return 1;
}
flp = fopen("./student", "rb");
if (!flp)
{
char buf[60];
char* bptr = buf;
// 读文件并构造 memb 结构
ctab = matrixs((const char***)oristr, Rows, Cols);
while (fgets(buf, 60, fff) && *buf)
{
ctab->curc = getcol(ctab) - 1;
if (buf[strlen(buf) - 1] == '\n')buf[strlen(buf) - 1] = 0;
AddNewSubject(ctab, newitem(&bptr, 1, 1), 7);
}
fclose(fff);
}
else
{
int ch;
unsigned long long int maxi = sizeof(member);
unsigned long long int cut = 0;// crt
unsigned long long int time = 0;
f = (memb*)calloc(sizeof(memb), 1);
last = f;
while ((ch = fgetc(flp)) != EOF)
{
((char*)&last->m)[cut] = ch;
cut++;
if (cut >= maxi)
{
cut = 0;
last = last->n = (memb*)calloc(sizeof(memb), 1);
time++;
}
}
fclose(flp);
Studs2Tab(f, time);
}
chrome();
do
{
int mask = 0;
int RW = 1;
rewind(stdin), ord = _getch();
switch (ord)
{
case 128 + 96:
mask = 1;
switch (ord = _getch())
{
case 72:// UP
if (ctab->curr)
ctab->curr--;
else ctab->curr = getrow(ctab) - 1;
break;
case 75:// LEFT
if (ctab->curc)
ctab->curc--;
else ctab->curc = getcol(ctab) - 1;
break;
case 77:// RIGHT
if (ctab->curc < getcol(ctab) - 1)
ctab->curc++;
else ctab->curc = 0;
break;
case 80:// DOWN
if (ctab->curr < getrow(ctab) - 1)
ctab->curr++;
else ctab->curr = 0;
break;
default:
break;
}
MatrixRecur(ctab);
break;
default:
if (ord == 'q' || ord == 'Q') break;// 退出
else if ((ord == 'i' || ord == 'I') && before(ctab->curc, ctab->curr))
{
char* buf = (char*)
malloc(128);
char* p = buf;
rewind(stdin);
gets_s(buf, 64);
if (verify(ctab->curc, ctab->curr, buf))
assignx(ctab->cons[ctab->curr][ctab->curc].content, strnew(buf, 62));
free(buf);
after(ctab, ctab->curr);
{
if (ctab->curr < getrow(ctab) - 1)
ctab->curr++;
else ctab->curr = 0;
} print(ctab);
}
break;
}
ord = mask ? (-ord) : ord;
if (ord == 'n' || ord == 'N')// 新学生
{
ctab->curr = getrow(ctab) - 1;
AddNewStudent(ctab, newitem(apdrow, 6, getcol(ctab)), 1);
}
else if (ord == 'm' || ord == 'M')// 新科目
{
ctab->curc = getcol(ctab) - 1;
if (ctab->curc >= 6)
AddNewSubject(ctab, newitem(apdcol, 1, getrow(ctab)), 10);
}
else if (ord == 'f' || ord == 'F')// 查找学生
{
PrintTheScanMenu();
}
else if (ord == 'q' || ord == 'Q')// 退出并保存
{
unsigned long long int sbjlooptime;
memb* next = f;
while (next)
{
next = f->n;
free(f);
f = next;
}
fff = fopen("./groups", "wb");
sbjlooptime = getcol(ctab) - 7;
for (i = 0; i < sbjlooptime; i++)
fprintf(fff, "%s\n", ctab->cons[0][7 + i].content);
fclose(fff);
flp = fopen("./student", "w");
last = f = Tab2Studs(ctab);
while (last)
{
for (ii = 0; ii < sizeof(member); ii++)
fputc(((char*)&last->m)[ii], flp);
last = last->n;
}
fclose(flp);
next = f;
while (next)
{
next = f->n;
free(f);
f = next;
}
}
else if (ord == 'r' || ord == 'R')// 删除学生
{
if (ctab->curr)
{
unsigned int newrowcount = getrow(ctab) - 1;
unsigned* NewRows;
unsigned rowsp = ctab->rows[ctab->curr + 1] - ctab->rows[ctab->curr];
unsigned i;
CMatrixItem** NewCon;
(NewRows = (unsigned int*)calloc((newrowcount + 2) * sizeof(unsigned), 1));
for (i = 0; i < ctab->curr; i++)
NewRows[i] = ctab->rows[i];
for (i = ctab->curr; i < newrowcount + 1; i++)
{
NewRows[i] = ctab->rows[i + 1] - rowsp;
}
NewRows[newrowcount + 1] = 0;
assignx(ctab->rows, NewRows);
NewCon = (CMatrixItem**)calloc((newrowcount) * sizeof(struct CMatrixItem*), 1);
memcpy((char*)NewCon, (const char*)ctab->cons, ctab->curr * sizeof(struct CMatrixItem*));
for (i = ctab->curr; i < newrowcount; i++)
{
NewCon[i] = ctab->cons[i + 1];
}
for (i = 0; i < getcol(ctab); i++)
{
free(ctab->cons[ctab->curr][i].content);
}
free(ctab->cons[ctab->curr]);
assignx(ctab->cons, NewCon);
if (ctab->curr)
ctab->curr--;
}
}
else if (ord == 'd' || ord == 'D')// 删除科目
{
if (ctab->curc >= 7)
{
unsigned int newcolcount = getcol(ctab) - 1;
unsigned int newrowcount = getrow(ctab);
unsigned* NewCols;
unsigned colsp = ctab->cols[ctab->curc + 1] - ctab->cols[ctab->curc];
unsigned i, j;
NewCols = (unsigned int*)calloc((newcolcount + 2) * sizeof(unsigned), 1);
for (i = 0; i < ctab->curc; i++)
NewCols[i] = ctab->cols[i];
for (i = ctab->curc; i < newcolcount + 1; i++)
NewCols[i] = ctab->cols[i + 1] - colsp;
NewCols[newcolcount + 1] = 0;
assignx(ctab->cols, NewCols);
for (i = 0; i < newrowcount; i++)
{
CMatrixItem* NewCon;
NewCon = (CMatrixItem*)malloc((newcolcount) * sizeof(struct CMatrixItem));
memcpy((char*)NewCon, (const char*)(ctab->cons[i]), ctab->curc * sizeof(struct CMatrixItem));
for (j = ctab->curc; j < newcolcount; j++)
{
NewCon[j] = ctab->cons[i][j + 1];
}
free(ctab->cons[i][ctab->curc].content);
assignx(ctab->cons[i], NewCon);
}
if (ctab->curc) ctab->curc--;
}
}
else if (ord < 0)
{
int ll;
gotoxy(0, 0);
ll = printf("当前单元格内容:%.64s", ctab->cons[ctab->curr][ctab->curc].content);
for (; ll < 64; ll++) putchar(' ');
MatrixRecur(ctab);
continue;
}
else continue;
chrome();
} while (ord != 'q' && ord != 'Q');
system("cls");
// 内存回收
for (i = 0; !i || ctab->rows[i + 1] > 0; i++)
{
for (j = 0; !j || ctab->cols[j + 1] > 0; j++)
{
free(ctab->cons[i][j].content);
}
free(ctab->cons[i]);
}
free(ctab->cols);
free(ctab->rows);
free(ctab->cons);
free(ctab);
}
没有合适的资源?快使用搜索试试~ 我知道了~
使用C语言和Visual C++ 2010软件环境设计的学生信息管理系统
共4个文件
groups:1个
student:1个
h:1个
需积分: 0 4 下载量 116 浏览量
2023-06-01
16:22:52
上传
评论
收藏 8KB ZIP 举报
温馨提示
这段代码是一个简单的学生成绩管理系统。它使用了GBK编码,基于VC++2010开发。 1、代码中定义了一些常量和全局变量,包括字符串数组和文件指针。主要的数据结构是CMatrix和member结构体。CMatrix用于表示学生信息表格,包括行、列和单元格内容。member用于表示学生的具体信息,包括学号、身份证号、姓名、专业和成绩。 2、代码主函数main()开始执行时,首先打印菜单标题,然后读取文件中的科目信息和学生信息。如果文件不存在,则会自动生成默认的科目信息。然后进入主循环,根据用户输入执行相应的操作。主要操作包括浏览表格、修改单元格内容、新增学生、新增科目、查找学生、删除学生、删除科目等。用户可以通过按键进行操作,按下'q'键时退出程序并保存数据。 3、代码中还定义了一些辅助函数,用于处理表格和学生信息的操作,如打印表格、添加学生、添加科目等。 总之,这段代码实现了一个简单的学生成绩管理系统,可以进行学生信息的录入、修改和查询等操作。
资源推荐
资源详情
资源评论
收起资源包目录
程序源码.zip (4个子文件)
程序源码
groups 5B
Kaif.c 7KB
Kaif.h 18KB
student 928B
共 4 条
- 1
资源评论
Kaif_z
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功