软件开发笔记——学生成绩管理系统

///软件开发笔记——学生成绩管理系统

软件开发笔记——学生成绩管理系统

新分类又一次上线了……虽然还是很菜的东西……

老师让我们做的一个小程序,稍微多加了一点功能,然后变成了一个勉强能用的软件了……

因为比较简单,先直接上代码到时候看心情补讲解……

//database.c(主文件)中的内容

#include"sinon_database_fuction.h"
#pragma warning(disable:4996)

int main()
{
	//执行登陆操作
	int a;
	while (1)
	{
		a = login();
		if (a == 1)
			break;
		else if (a == 0)
			return 0;
	}
	//检测数据文件
	detect();
	//用于存放控制指令
	int control = 0, result = 0;
	//死循环确保程序运行
	while (1)
	{
		//登陆后菜单界面
		control = menu();
		switch (control)
		{
		default:
			puts("无效的输入!");
			break;
		case 1:
			result = search();
			break;
		case 2:
			result = edit();
			break;
		case 3:
			result = del();
			break;
		case 4:
			result = add();
			break;
		case 5:
			result = sort();
			break;
		case 6:
			puts("感谢使用!");
			Sleep(1000);
			return 0;
		}
	}
}
//sinon_database_fuction.h中的内容 #pragma warning(disable:4996) #include <stdio.h> #include <stdlib.h> #include <math.h> #include <Windows.h> #include <string.h> #include <time.h> #define PASSWORD "sinon" //定义数据结构体 struct Student { char ID[20]; char name[30]; int age; double score; }; int cmp(struct Student *a, struct Student *b); //登陆函数 int login() { char password[30] = "00000000000000000000000000000", ch = 0; puts("欢迎使用Sinon的学生信息管理系统!"); puts("请先登录,或输入exit退出:"); scanf("%s", password); if (strcmp(password, PASSWORD) == 0) { puts("登陆成功!"); return 1; } else if (strcmp(password, "exit") == 0) { return 0; } else { puts("密码错误,请重试!"); Sleep(1000); return -1; } } //数据库检测函数 void detect() { FILE *fp; fp = fopen("D:/Info.dat", "r"); int control = 0; if (!fp) { int i = 1; while (i) { puts("数据库文件还未创建,需要创建一个吗?(是:1,否:2)"); scanf("%1d", &control); switch (control) { default: puts("你输的啥玩意?请输1或2"); break; case 1: fp = fopen("D:/Info.dat","w+"); puts("文件创建成功!"); fprintf(fp, "%lf,%d,%s\n%s\n", 100.0,19,"test","B0000000000"); i = 0; break; case 2: puts("不创建你运行这程序干啥?回去选1。"); break; } } } else { puts("数据库已被成功读取。"); } fclose(fp); } //菜单函数 int menu() { while (1) { int control = 0; puts("*******************MENU***********************"); puts("*1.数据查询 *"); puts("*2.数据修改 *"); puts("*3.数据删除 *"); puts("*4.数据添加 *"); puts("*5.排名查询 *"); puts("*6.系统退出 *"); puts("*请输入菜单前的数字来执行指令 *"); puts("**********************************************"); scanf("%1d", &control); if ((control > 0) & (control < 7)) { return control; } else { puts("无效的命令,请重试!"); Sleep(1000); system("cls"); } } } //数据查询函数 int search() { system("cls"); FILE *fp; struct Student read[1000]; int count = 0; fp = fopen("D:/Info.dat", "rt"); for (int i = 0; i <= 999; i++) { if (feof(fp)) { count--; break; } fscanf(fp, "%lf,%d,%s%s",&read[i].score, &read[i].age, read[i].name, read[i].ID); count++; } if (count == 0) { puts("当前暂无数据!"); fclose(fp); return 0; } puts("|--------------------------------------------------------------------------|"); puts("| 序号 ID name age score |"); for (int i = 0; i <= (count-1); i++) { printf("| %4d %20s %20s %2d %.3f |\n",i,read[i].ID , read[i].name, read[i].age, read[i].score); } puts("|--------------------------------------------------------------------------|"); fclose(fp); return 0; } //数据修改函数 int edit() { system("cls"); FILE *fp; struct Student read[1000],edit; int count = 0, target = -1; fp = fopen("D:/Info.dat", "rt"); for (int i = 0; i <= 999; i++) { if (feof(fp)) { count--; break; } fscanf(fp, "%lf,%d,%s%s", &read[i].score, &read[i].age, read[i].name, read[i].ID); count++; } puts("请输入你需要修改的条目序号:"); scanf("%5d", &target); if (target < 0 || target >= count) { puts("没有查询到此序号的条目,请重试!"); fclose(fp); return 0; } puts("请输入该学生的名字:"); scanf("%20s", &edit.name); puts("请输入该学生的年龄:"); scanf("%2d", &edit.age); puts("请输入该学生的ID:"); scanf("%s", &edit.ID); puts("请输入该学生的成绩:"); scanf("%lf", &edit.score); strcpy(read[target].name, edit.name); strcpy(read[target].ID, edit.ID); read[target].age = edit.age; read[target].score = edit.score; fclose(fp); fp = fopen("D:/Info.dat", "w"); for (int i = 0; i <= (count - 1); i++) { fprintf(fp, "%lf,%d,%s\n%s\n", read[i].score, read[i].age, read[i].name, read[i].ID); } puts("数据修改成功!"); fclose(fp); Sleep(1000); return 0; } //数据删除函数 int del() { system("cls"); FILE *fp; struct Student read[1000]; int count = 0, target = -1; fp = fopen("D:/Info.dat", "rt"); for (int i = 0; i <= 999; i++) { if (feof(fp)) { count--; break; } fscanf(fp, "%lf,%d,%s%s", &read[i].score, &read[i].age, read[i].name, read[i].ID); count++; } puts("请输入你需要删除的条目ID:"); scanf("%100d", &target); if (target < 0 || target >= count) { puts("没有查询到此ID的条目,请重试!"); fclose(fp); return 0; } fclose(fp); fp = fopen("D:/Info.dat", "w"); for (int i = 0; i <= (count - 1); i++) { if (i == target) continue; fprintf(fp, "%lf,%d,%s\n%s\n", read[i].score, read[i].age, read[i].name, read[i].ID); } puts("数据删除成功!"); fclose(fp); return 0; } //数据增加函数 int add() { system("cls"); FILE *fp; struct Student edit; fp = fopen("D:/Info.dat", "a+"); puts("请输入该学生的名字:"); scanf("%20s", &edit.name); puts("请输入该学生的年龄:"); scanf("%2d", &edit.age); puts("请输入该学生的ID:"); scanf("%s", &edit.ID); puts("请输入该学生的成绩:"); scanf("%lf", &edit.score); fprintf(fp, "%lf,%d,%s\n%s\n", edit.score, edit.age, edit.name, edit.ID); puts("数据增加成功!"); fclose(fp); return 0; } //成绩排名函数 int sort() { system("cls"); FILE *fp; struct Student read[1000]; int count = 0; fp = fopen("D:/Info.dat", "rt"); for (int i = 0; i <= 999; i++) { if (feof(fp)) { count--; break; } fscanf(fp, "%lf,%d,%s%s", &read[i].score, &read[i].age, read[i].name, read[i].ID); count++; } qsort(read, count, sizeof(read[0]), cmp); puts("|--------------------------------------------------------------------------|"); puts("| 排名 ID name age score |"); for (int i = 0; i <= (count - 1); i++) { printf("| %4d %20s %20s %2d %.3f |\n", i+1, read[i].ID, read[i].name, read[i].age, read[i].score); } puts("|--------------------------------------------------------------------------|"); fclose(fp); return 0; } //比较函数 int cmp(struct Student *a, struct Student *b) { return (a->score) < (b->score) ? 1 : -1; }
发布者 | 2019-07-02T02:46:26+08:00 十二月 19th, 2018|学习笔记, 软件开发|0条评论

关于作者

坚强大概——并不是指的的结果,而是迈向某个目标的过程吧。

发表评论

博客作者

坚强大概——并不是指的的结果,而是迈向某个目标的过程吧。

标签云

博客统计

  • 3,223 点击次数
召唤伊斯特瓦尔