精华内容
下载资源
问答
  • c语言大作业管理系统
    千次阅读 多人点赞
    2020-03-13 00:02:10

    C语言大作业:车辆管理系统

    声明
    此代码使用VS2019编译器进行编译
    使用 vc 和 dev-c 的有可能会出现编译警告,需要自己去网上查找相关的编译环境的问题
    其次使用vs编译器也可能会报 C4996 错误,请自行搜索 C4996 错误
    最后也是最容易忽略的错误,C/C++编译器常使用ASCII码
    CSDN上直接复制的代码是UTF-8格式的需要自己手动调(自行搜索)

    要注意文件读写问题需要跟编译器环境有关系当时编写没考虑其他编译环境
    需要自己去搜读取和写入的函数可以自己进行修改

    本代码已经尝试很多次已确定代码格式无误.报错问题绝大部分与编译器的调制有关


    此外
    由于这是作者大一时候编写的,不一定有时间及时回答真想问加Q:1403145273并写明
    一起学习

    流程图

    C语言大作业流程图
    大概流程
    具体流程
    在这里插入图片描述

    代码

    声明

    由于很多人说我的程序执行失败,我在此解释一下
    我的编译环境是VS2019 使用dev和VC的在scanf_s会报错,因为这个函数是VS才有的好像

    总之不能使用的时候建议百度

    其次 由于不同的编译环境对程序的要求不同,有些需要调整编译器的警告等级才能使用

    在执行程序前,需要在当前cpp文件夹内自己手动建立car.txt文本才能运行成功
    请看仔细点
    初始化信息是在car.txt文件内的,我没有写在程序内所有在运行时会显示没有内容
    要写初始化信息自己先运行程序中输入新的信息录入才会更新初始化内容

    文件尾的问题也是CSDN在复制长代码的时候会出现的问题,需要分开复制
    IntelliSense:此声明没有存储类型或类型说明符 同理

    大部分都是出现在IO流的问题,请自行根据自己的编译器进行调整

    ​#include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    typedef struct car;
    typedef struct list_car;
    typedef struct list_car_sequence;
    list_car* rear=NULL;
    /* 数据模型 */
    struct car {
    	char type_of_name[10];//车型
    	char manufacturer[10];//厂商
    	char model_class[10];//车型级别
    	char seating_number[10];//座位数
    	char output_volume[10];//排量
    	char transmission_case[10];//变速箱
    	char color[10];//颜色
    	char prize[10];//价格
    };
    /* 链表 */
    struct list_car {
    	car* imformation;
    	list_car* next;
    };
    /* 按顺序排列链表 */
    struct list_car_sequence {
    	char name[10];
    	char imformation[10];
    	list_car_sequence* next;
    };
    
    /* [结构体] 从 [文本] 获得信息 */
    list_car* read_list_car() {
    	FILE* fp;
    	list_car* create, * head = NULL;
    	int num = 0;
    	if ((fp = fopen("car.txt", "r")) == NULL) {
    		printf("打开文件失败");
    		exit(0);
    	}
    	create = rear = (list_car*)malloc(sizeof(list_car));
    	create->imformation = (car*)malloc(sizeof(car));
    	while ((fscanf(fp, "%s", create->imformation->type_of_name)) != EOF) {
    		fscanf(fp, "%s""%s""%s""%s""%s""%s""%s", create->imformation->manufacturer, create->imformation->model_class
    			, create->imformation->seating_number, create->imformation->output_volume, create->imformation->transmission_case
    			, create->imformation->color, create->imformation->prize);
    		num++;
    		if (num == 1)
    			head = rear;
    		else
    			rear->next = create;
    		rear = create;
    		create = (list_car*)malloc(sizeof(list_car));
    		create->imformation = (car*)malloc(sizeof(car));
    	}
    	rear->next = NULL;
    	free(create->imformation);
    	free(create);
    	fclose(fp);
    	printf("录入成功");
    	return head;
    }
    
    /* [文本] 从 [结构体] 获得信息 */
    void write_list_car(list_car*head) {
    	FILE* fp;
    	if ((fp = fopen("car.txt", "w")) == NULL) {
    		printf("打开文件失败");
    	}
    	list_car* p = head;
    	for(;p!=NULL;p=p->next)
    		fprintf(fp,"%s ""%s ""%s ""%s ""%s ""%s ""%s ""%s", p->imformation->type_of_name, p->imformation->manufacturer, p->imformation->model_class, p->imformation->seating_number, p->imformation->output_volume, p->imformation->transmission_case, p->imformation->color, p->imformation->prize);
    	printf("写入文件成功!\n");
    	fclose(fp);
    }
    
    /******************************************************//*		修改	*//*************************************************************/
    
    /* 录入车辆信息进 [结构体内]  */
    void list_car_write(list_car*rear) {
    	list_car* p = (list_car*)malloc(sizeof(list_car));
    	p->next = NULL;//容易漏
    	p->imformation = (car*)malloc(sizeof(car));
    	printf("请输入\n");
    	scanf_s("%s""%s""%s""%s""%s""%s""%s""%s", p->imformation->type_of_name, sizeof(p->imformation->type_of_name)
    		, p->imformation->manufacturer, sizeof(p->imformation->manufacturer), p->imformation->model_class
    		, sizeof(p->imformation->model_class), p->imformation->seating_number, sizeof(p->imformation->seating_number)
    		, p->imformation->output_volume, sizeof(p->imformation->output_volume), p->imformation->transmission_case
    		, sizeof(p->imformation->transmission_case), p->imformation->color, sizeof(p->imformation->color), p->imformation->prize, sizeof(p->imformation->prize));
    	getchar();
    	if(rear!=NULL)
    		rear->next = p;
    	rear = p;
    }
    
    /* 修改 [结构体内] 车辆具体信息 */
    void list_car_alter(list_car* head) {
    
    	if (head == NULL) {
    		printf("头指针为空!\n");
    		return;
    	}
    
    	list_car* p = head;
    	char name[20];
    	printf("请输入型号:\n");
    	scanf_s("%s", name, sizeof(name));
    	getchar();
    
    	for (;p != NULL;p = p->next)
    		if (strcmp(name, p->imformation->type_of_name) == 0)
    			break;
    	if (p == NULL) {
    		printf("没有找到该类型!\n");
    		return;
    	}
    
    	printf("请输入修改类型的序号:\n");
    	char imformation;
    	imformation = getchar();
    
    	printf("请输入修改后内容\n");
    	switch (imformation)
    	{
    	case '1':scanf_s("%s", p->imformation->type_of_name, sizeof(p->imformation->type_of_name));break;
    	case '2':scanf_s("%s", p->imformation->manufacturer, sizeof(p->imformation->manufacturer));break;
    	case '3':scanf_s("%s", p->imformation->model_class, sizeof(p->imformation->model_class));break;
    	case '4':scanf_s("%s", p->imformation->seating_number, sizeof(p->imformation->seating_number));break;
    	case '5':scanf_s("%s", p->imformation->output_volume, sizeof(p->imformation->output_volume));break;
    	case '6':scanf_s("%s", p->imformation->transmission_case, sizeof(p->imformation->transmission_case));break;
    	case '7':scanf_s("%s", p->imformation->color, sizeof(p->imformation->color));break;
    	case '8':scanf_s("%s", p->imformation->prize, sizeof(p->imformation->prize));break;
    	}
    	getchar();
    	printf("修改成功!\n");
    
    }
    
    /* 删除 [结构体内] 车辆信息 */
    void list_car_delete(list_car* head) {
    	if (head == NULL) {
    		printf("头指针为空!\n");
    		return;
    	}
    	printf("进入修改\n");
    	list_car* p = head,*t=head;
    	char name[20];
    	printf("请输入\n");
    	scanf_s("%s", name, sizeof(name));
    	getchar();
    	for (;p != NULL;p = p->next)
    		if (strcmp(name, p->imformation->type_of_name) == 0) {
    			printf("已找到\n");
    			break;
    		}
    		else
    			t = p;
    	if (p == NULL) {
    		printf("没有找到该类型!\n");
    		return;
    	}
    
    	printf("请输入删掉的内容\n");
    	char information;
    	
    
    loop:scanf_s("%c", &information, sizeof(information));
    	getchar();
    	switch (information) {//结构体里的字符型数组是不能被赋值的,我也不知道为什么.好像是被当成了常量
    	case '0':t->next = p->next;printf("删除成功!\n");break;
    	case '1':strcpy(p->imformation->manufacturer, "无信息");break;
    	case '2':strcpy(p->imformation->model_class, "无信息");break;
    	case '3':strcpy(p->imformation->seating_number, "无信息");break;
    	case '4':strcpy(p->imformation->output_volume, "无信息");break;
    	case '5':strcpy(p->imformation->transmission_case, "无信息");break;
    	case '6':strcpy(p->imformation->color, "无信息");break;
    	case '7':strcpy(p->imformation->prize, "无信息");break;
    	default:printf("无法识别该序号,请重新输入序号");goto loop;
    	}
    }
    
    /******************************************************//*		修改	*//*************************************************************/
    
    /******************************************************//*		输出	*//*************************************************************/
    
    /* 查询 [结构体内] 车辆具体信息 */
    void search(list_car* head) {
    	if (head == NULL) {
    		printf("头指针为空!\n");
    		return;
    	}
    	void search_prize(list_car * head);
    	void search_other(list_car * head);
    	char find[10] = { 0 };//字符初始化
    	
    	printf("请输入你想查找的范围:例如 价格 、 厂商 、 车型级别 ,退出则输入 退出\n");
    	scanf_s("%s", find, sizeof(find));
    	while ((strcmp(find,"退出")!=0)) {
    		getchar();
    		if (strcmp(find, "价格") == 0)
    			search_prize(head);
    		else if (strcmp(find, "厂商") == 0 || strcmp(find, "车型级别") == 0)
    			search_other(head);
    		else
    			printf("搜索没有此项,请重新输入\n");
    		printf("请输入你想查找的范围:例如 价格 、 厂商 、 车型级别 ,退出则输入 退出\n");
    		scanf_s("%s", find, sizeof(find));
    	}
    	
    }
    void search_prize(list_car* head) {
    	list_car* p = head;
    	list_car_sequence* sequence_head = NULL;
    	list_car_sequence* list_prize_sequence(list_car_sequence * sequence_head, list_car * p);
    	float prize_down, prize_high;
    	printf("请依次输入最低价格和最高价格\n");
    	scanf_s("%f%f", &prize_down, &prize_high);
    	for (;p != NULL;p = p->next)
    		if (atof(p->imformation->prize) >= prize_down && atof(p->imformation->prize) <= prize_high)
    			sequence_head = list_prize_sequence(sequence_head, p);
    	if (sequence_head == NULL) {
    		printf("该价格范围内无车辆型号:\n");
    		return;
    	}
    	for (;sequence_head != NULL;sequence_head = sequence_head->next,printf("\n"))
    		printf("%s\t%s\n", sequence_head->name,sequence_head->imformation);
    	
    }
    void search_other(list_car* head) {
    	list_car_sequence* list_dissequence(list_car_sequence * dissequence, list_car * p);
    	list_car* p = head;
    	list_car_sequence* dissequence_head=NULL;
    	void list_prize_sequence(list_car_sequence * sequence_head, list_car*p);
    	printf("请输入你想找的内容:\n");
    	char name[20] = { 0 };
    	scanf_s("%s", name, sizeof(name));
    	getchar();
    	for (;p != NULL;p = p->next)
    		if (strcmp(name, p->imformation->manufacturer) == 0 || strcmp(name, p->imformation->model_class) == 0 ) {
    			dissequence_head = list_dissequence(dissequence_head, p);
    		}
    	if (dissequence_head == NULL) {
    		printf("没有找到相关内容!\n");
    		return;
    	}
    	for (;dissequence_head != NULL;dissequence_head = dissequence_head->next)
    		printf("%s\n", dissequence_head->name);
    	
    }
    
    list_car_sequence* list_prize_sequence(list_car_sequence* sequence_head, list_car* p) {
    
    	if (sequence_head == NULL) {
    		
    		sequence_head = (list_car_sequence*)malloc(sizeof(list_car_sequence));
    		strcpy(sequence_head->imformation, p->imformation->prize);
    		strcpy(sequence_head->name, p->imformation->type_of_name);
    		sequence_head->next = NULL;
    		return sequence_head;
    	}
    	else {
    		list_car_sequence* t = sequence_head, * next = NULL, * x = sequence_head;
    		
    		for (;sequence_head != NULL;sequence_head = sequence_head->next) {
    			
    			if (atof(sequence_head->imformation) >= atof(p->imformation->prize)) {
    				
    				
    				if (t == sequence_head) {
    					
    					next = (list_car_sequence*)malloc(sizeof(list_car_sequence));
    					next->next = sequence_head;
    					strcpy(next->imformation, p->imformation->prize);
    					strcpy(next->name, p->imformation->type_of_name);
    					
    					return next;
    					
    				}
    				else {
    					
    					next = (list_car_sequence*)malloc(sizeof(list_car_sequence));
    					t->next = next;
    					next->next = sequence_head;
    					strcpy(next->imformation, p->imformation->prize);
    					strcpy(next->name, p->imformation->type_of_name);
    					return x;
    				}
    			}
    			else
    				t = sequence_head;
    		}
    		if (sequence_head == NULL) {
    			next = (list_car_sequence*)malloc(sizeof(list_car_sequence));
    			strcpy(next->imformation, p->imformation->prize);
    			strcpy(next->name, p->imformation->type_of_name);
    			t->next = next;
    			next->next = NULL;
    			return x;
    		}
    	}
    }
    list_car_sequence* list_seating_sequence(list_car_sequence* sequence_head, list_car* p) {
    
    	if (sequence_head == NULL) {
    		sequence_head = (list_car_sequence*)malloc(sizeof(list_car_sequence));
    		strcpy(sequence_head->imformation, p->imformation->seating_number);
    		strcpy(sequence_head->name, p->imformation->type_of_name);
    		sequence_head->next = NULL;
    		return sequence_head;
    	}
    	else {
    		list_car_sequence* t = sequence_head, * next = NULL, * x = sequence_head;
    		
    		for (;sequence_head != NULL;sequence_head = sequence_head->next) {
    			if (atof(sequence_head->imformation) >= atof(p->imformation->seating_number)) {
    				if (t == sequence_head) {
    					next = (list_car_sequence*)malloc(sizeof(list_car_sequence));
    					next->next = sequence_head;
    					strcpy(next->imformation, p->imformation->seating_number);
    					strcpy(next->name, p->imformation->type_of_name);
    					return next;
    				}
    				else {
    					next = (list_car_sequence*)malloc(sizeof(list_car_sequence));
    					t->next = next;
    					next->next = sequence_head;
    					strcpy(next->imformation, p->imformation->seating_number);
    					strcpy(next->name, p->imformation->type_of_name);
    					return x;
    				}
    			}
    			else
    				t = sequence_head;
    		}
    		if (sequence_head == NULL) {
    			next = (list_car_sequence*)malloc(sizeof(list_car_sequence));
    			strcpy(next->imformation, p->imformation->seating_number);
    			strcpy(next->name, p->imformation->type_of_name);
    			t->next = next;
    			next->next = NULL;
    			return x;
    		}
    	}
    }
    list_car_sequence* list_output_sequence(list_car_sequence* sequence_head, list_car* p) {
    
    	if (sequence_head == NULL) {
    		sequence_head = (list_car_sequence*)malloc(sizeof(list_car_sequence));
    		strcpy(sequence_head->imformation, p->imformation->output_volume);
    		strcpy(sequence_head->name, p->imformation->type_of_name);
    		sequence_head->next = NULL;
    		return sequence_head;
    	}
    	else {
    		list_car_sequence* t = sequence_head, * next = NULL, * x = sequence_head;
    		
    		for (;sequence_head != NULL;sequence_head = sequence_head->next) {
    			if (atof(sequence_head->imformation) >= atof(p->imformation->output_volume)) {
    				if (t == sequence_head) {
    					next = (list_car_sequence*)malloc(sizeof(list_car_sequence));
    					next->next = sequence_head;
    					strcpy(next->imformation, p->imformation->output_volume);
    					strcpy(next->name, p->imformation->type_of_name);
    					return next;
    				}
    				else {
    					next = (list_car_sequence*)malloc(sizeof(list_car_sequence));
    					t->next = next;
    					next->next = sequence_head;
    					strcpy(next->imformation, p->imformation->output_volume);
    					strcpy(next->name, p->imformation->type_of_name);
    					return x;
    				}
    			}
    			else
    				t = sequence_head;
    		}
    		if (sequence_head == NULL) {
    			next = (list_car_sequence*)malloc(sizeof(list_car_sequence));
    			strcpy(next->imformation, p->imformation->output_volume);
    			strcpy(next->name, p->imformation->type_of_name);
    			t->next = next;
    			next->next = NULL;
    			return x;
    		}
    	}
    }
    list_car_sequence* list_dissequence(list_car_sequence* dissequence, list_car* p) {
    	
    	if (dissequence == NULL) {
    		dissequence = (list_car_sequence*)malloc(sizeof(list_car_sequence));
    		strcpy(dissequence->name, p->imformation->type_of_name);
    		strcpy(dissequence->imformation,"/0");
    		dissequence->next = NULL;
    		return dissequence;
    	}
    	else {
    		list_car_sequence* creat = (list_car_sequence*)malloc(sizeof(list_car_sequence));
    		strcpy(creat->name, p->imformation->type_of_name);
    		strcpy(creat->imformation, "/0");
    		creat->next = dissequence;
    		return creat;
    	}
    }
    
    /* 浏览 [结构体内] 所有车辆信息 */
    void export_list(list_car* head) {
    
    
    	list_car_sequence* prize_sequence_head=NULL, * seating_sequence_head=NULL, * output_sequence_head=NULL;
    	if (head == NULL){
    		printf("头指针为空!\n");
    		return;
    	}
    		
    	else {
    		printf("车型\t厂商\t\t车型级别\t座位数\t排量\t变速箱\t车身颜色\t价格\n");
    		printf("_______________________________________________________________________________________\n");
    		
    		for (; head != NULL; head = head->next) {
    
    			printf("%s\t""%s\t""%s\t""%s座\t""%sT\t""%s\t""%s\t\t""%s万\n", head->imformation->type_of_name, head->imformation->manufacturer, head->imformation->model_class, head->imformation->seating_number, head->imformation->output_volume, head->imformation->transmission_case, head->imformation->color, head->imformation->prize);
    			printf("\n");
    			prize_sequence_head = list_prize_sequence(prize_sequence_head, head);
    			seating_sequence_head = list_seating_sequence(seating_sequence_head, head);
    			output_sequence_head = list_output_sequence(output_sequence_head, head);
    
    		}
    		
    	}
    		
    	printf("从小到大类型:");
    	getchar();
    	char c;
    	list_car_sequence* p;
    	printf("1价格 2座位数 3排量 CTRL+Z退出 ");
    	while (~(c = getchar())) {
    
    		switch (c) {
    		case '1':p = prize_sequence_head;break;
    		case '2':p = seating_sequence_head;break;
    		case '3':p = output_sequence_head;break;
    		default:system("cls");printf("请重新输入:");goto loop;
    		}
    
    
    		if (p == NULL) {
    			printf("没有信息!\n");
    			return;
    		}
    		printf("_____________\n");
    		for (;p != NULL;p = p->next,printf("\n"))
    			printf("%s\t%s\n", p->name, p->imformation);
    		
    		getchar();
    		loop:	printf("1价格 2座位数 3排量 CTRL+Z退出 ");
    	}
    }
    
    /******************************************************//*		输出	*//*************************************************************/
    int main() {
    	list_car* head = read_list_car();
    	char x;
    	printf("1为浏览所有信息 2为查询车辆具体信息 3录入新的车辆 4修改车辆信息 5为删除车辆信息 CTRL+Z为退出\n"
    		"请选择你想进行的功能:");
    	while (~(x = getchar())) {
    		system("cls");
    		switch (x) {
    		case '1':export_list(head);break;
    		case '2':search(head);break;
    		case '3':list_car_write(rear);break;
    		case '4':list_car_alter(head);break;
    		case '5':list_car_delete(head);break;
    		default:printf("输入有误,请重新输入:\n");getchar();break;
    		}
    		system("cls");
    		printf("1为浏览所有信息 2为查询车辆具体信息 3录入新的车辆 4修改车辆信息 5为删除车辆信息 CTRL+Z为退出\n"
    			"请选择你想进行的功能:");
    	}
    	write_list_car(head);
    
    	return 0;
    }
    更多相关内容
  • 大一写的结课作业,代码用到了文件、数组、结构体、函数,包括增删改查和成绩排名等功能,欢迎大家下载使用。
  • 此实验需要在CodeBlocks等C语言编译平台上完成同时本实验要求所写的程序可以流畅的在编译平台上运行。首先为用户提供一个菜单,展示各个选项的功能,用户可输入一个选项(数字),执行相应的功能,通过运用switch...
  • 此实验需要在CodeBlocks等C语言编译平台上完成同时本实验要求所写的程序可以流畅的在编译平台上运行。首先为用户提供一个菜单,展示各个选项的功能,用户可输入一个选项(数字),执行相应的功能,通过运用switch...
  • C语言大作业-员工管理系统(主要功能如下)(免积分下载) system("cls");//清屏 printf("************* 员工工资管理系统 **************\n"); printf("* 1-----增加员工信息 *\n"); printf("* 2-----查询...
  • C语言课程设计-C语言大作业歌手大赛管理系统源码。歌手大赛管理系统 包含对歌手信息的录入、删除、查询、修改、排序、显示、评委打分等功能 软件架构 软件架构说明 使用说明 双击文件"歌手大赛管理系统.exe"运行 ...
  • 在大学自己写的c语言学生信息管理系统
  • C语言课程设计-C语言大作业学生管理系统源码,C语言课程设计-C语言学生管理系统源码C语言课程设计-C语言学生管理系统源码C语言课程设计-C语言学生管理系统源码C语言课程设计-C语言学生管理系统源码C语言课程设计-...
  • C语言大学课程作业 含课程报告 自我撰写 无抄袭无参考 满分 400行代码
  • 6.按学号由小到排出成绩表 7.按姓名的字典顺序排出成绩表 8.按学号查询学生排名及其考试成绩 9.按姓名查询学生排名及其考试成绩 10.按优秀(90-100)、良好(80-89)、中等(70-79)、及格(60-69)、不及格...
  • 期末大作业-33个C语言程序(免积分下载),程序内容如下所示: c语言火车票订票管理源码 c语言电子时钟程序 C语言超市管理系统 c语言通讯录管理系统源码 c语言商品销售系统源码(用不了那么多可以和别人一起入手) ...
  • C语言大作业——学生信息管理系统:创建、修改学生信息链表
  • 车辆管理--功能简单版(C语言大作业).zip
  • ①人机交互——数据输入和输出(包括数据浏览和查询); ②数据描述——实际问题求解所对应的数据及其类型; ③算法应用——交换、排序、插入、删除、筛选等; ④模块化设计——函数结构编程方法;...
  • 建立“二手车销售管理系统”,该系统具有读取、查询、排序、修改、新增、删除、统计、保存、输出等功能。 从文件中读取二手车出入库信息,每条信息至少包括车辆编号、车辆品牌、型号、原价、车龄、是否有大修、是否...
  • 大一写的结课作业,代码用到了链表、指针、文件、数组、结构体、函数等,包括增删改查、保存信息到文件和成绩排名等功能,欢迎大家下载使用。
  • C语言大作业】学生管理系统

    万次阅读 多人点赞 2019-11-22 17:49:40
    一时帮别人代做的大作业,用的C语言编写,这个项目还是很经典的,可以锻炼到自己C语言的文件操作,并且了解C语言的结构化编程方式。 整体结构 主函数 主函数本着极简风格,只用一个循环,根据用户输入进入相应模块...

    简介

    大一时做的大作业,用的C语言编写,这个项目还是很经典的,可以锻炼到自己C语言的文件操作,并且了解C语言的结构化编程方式。

    整体结构

    主函数

    主函数本着极简风格,只用一个循环,根据用户输入进入相应模块。

    int main(){
        int choose;
        init();        //初始化
         
        while(1){
            system("cls");        //清屏 
            borP("欢迎使用学生信息管理系统&&1.学生相关操作&2.课程相关操作&3.选课相关操作&4.设置        &0.退出系统    &&请输入您想要进行的操作序号");
            scanf("%d",&choose);
            switch(choose){
                case 0:{ex();break;}
                case 1:{stuOS();break;}
                case 2:{couOS();break;}
                case 3:{chooseOS();break;}
                case 4:{set();break;}
            }
        }
        
        return 0;
    }
    

    效果图
    在这里插入图片描述

    其它函数

    程序中一共有如下其它函数

    void mar();                    //输出左右外边距
    void pLine(char str[]);        //输出星线 
    void print(char str[]);        //输出一行 
    void borP(char str[]);        //按自动套边框的格式输出,如果框内要输出多行,就用&符连接 
    void ex();                    //退出程序 
    void stuOS();                //学生操作模块 
    void couOS();                //课程操作模块 
    void chooseOS();            //选课操作模块 
    void set();                    //设置边框属性 
    void init();                //程序初始化
    

    操作模块

    结构

    和主函数类似,所有操作模块都是先用一个循环判断是否退出这个模块,如果退出为假,就进入循环,根据用户输入进入相应操作,不过这次就没再继续进入某个函数模块了,不然最后一堆函数就会显得很乱了。
    格式:
    while(!exit){
    system(“cls”);
    borP(“xx相关操作&&1.xxxx&2.xxxx2&3.xxxx&4.xxxx&5.返回上一级 &0.退出系统 &&请输入您想要进行的操作序号”);
    scanf(“%d”,&choose);
    switch(choose){
    case 1:{操作1步骤;break;}
    case 2:{操作2步骤;break;}
    case 3:{操作3步骤;break;}
    case 4:{操作4步骤;break;}
    case 5:exit = 1;break; //这里直接用return也行,不过用exit更便于理解
    case 0;ex();
    }
    }

    学生操作模块

    界面
    学生操作界面
    操作实现
    添加学生操作的步骤是先用FILE指针fp以a+(不存在就创建,存在就在末尾追加内容)方式打开存储学生信息的文件,然后用循环读取用户输入的学生信息并写入文件中,直到用户输入CTRL+Z就结束录入并跳转首页。
    代码如下:

    fp = fopen("stuInfo.txt","a+");        //这里注意用a+,在末尾追加内容 
    printf("请按照学号 姓名 性别顺序输入学生信息,每名学生占一行,以EOF结束录入。\n");
    while(scanf("%s%s%s",stuId,stuName,stuSex)!=EOF)
        fprintf(fp,"%-20s%-20s%-5s\n",stuId,stuName,stuSex);
    printf("录入学生信息完毕,为您跳转到首页……\n");
    fclose(fp);Sleep(sleepTime);return;
    

    添加后stuInfo.txt文件内容存储结构如下:
    在这里插入图片描述
    而删除学生就要复杂些了,当用户输入删除学生学号并确认后,需要先创建一个tmp.txt,然后从stuInfo.txt中依次取出每个学生信息并比较要删除的学号,如果匹配失败就把这个学生信息写入tmp.txt,匹配成功令find=1并跳过不录入该学生信息,直到feof(fp)为空,即所有学生都已比对,就把stuInfo.txt删除,再把tmp.txt改名为stuInfo.txt,最后输出相应提示并返回。
    代码如下:

    fp = fopen("stuInfo.txt","r");
    printf("若档案中有此学生,其信息将被删除,否则您的操作不产生任何影响。\n");
    printf("请输入您要删除信息的学生的学号:\n");
    scanf("%s",tstuId);
    printf("您确定要将学号为 %s 的学生的全部信息删除吗?1.确定 0.取消\n", tstuId);
    printf("请输入选项序号1/0:\n");
    if(scanf("%d",&tmp)==1&&tmp==1){
        tfp = fopen("tmp.txt","w");
        //查找该学生 
        int find = 0; 
        while(!feof(fp)){
            fscanf(fp,"%s%s%s\n",stuId,stuName,stuSex);
            //如果不是要删除的学生,就填入tmp.txt 
            if(strcmp(stuId,tstuId))fprintf(tfp,"%-20s%-20s%-5s\n",stuId,stuName,stuSex);    
            else find = 1;     
        }
        fclose(fp);
        fclose(tfp);
        remove("stuInfo.txt");
        rename("tmp.txt","stuInfo.txt");
        if(find)printf("删除学生信息成功,为您跳转到首页……\n");
        else    printf("没有找到该学生信息,为您跳转到首页……\n");
    }
    else {
        fclose(fp);printf("取消了删除,为您跳转到首页……\n");
    }
    Sleep(sleepTime);return;
    

    课程操作模块

    界面
    在这里插入图片描述
    操作实现
    添加课程的步骤:先让用户输入课程信息,然后用r+(如果存在就返回null,不存在就创建)方式尝试创建该课程文件,如果创建失败就说明存在该课程,就提示存在并返回,如果创建成功,就在该文件中填入该课程信息提示成功并返回。
    代码如下:

    printf("请按照  课程编号 课程名称 课程人数  顺序输入课程信息\n");
    scanf("%s%s%d",couId,couName,&couMax);
    strcpy(fileName,couName);
    strcat(fileName,".txt");
    if((fp = fopen(fileName,"r+"))!=NULL){        //r+如果打开失败不会创建文件,所以用它做判断 
        printf("该课程已存在,录入失败,为您跳转到首页……\n");fclose(fp);
    } 
    else{
        fclose(fp);
        fp = fopen(fileName,"w");
        fprintf(fp,"%-10s%-10s%-5d%-5d%-5.2lf\n",couId,couName,couMax,0,0.0);
        fclose(fp);
        printf("课程信息添加成功,为您跳转到首页……\n");
    }
    Sleep(sleepTime);return;
    

    其它操作类似,这里就不多阐述了。

    选课操作模块

    界面
    在这里插入图片描述
    操作实现
    实现选课操作,需要先让用户输入选课学生学号,然后在stuInfo.txt中查找该学生,找不到就提示查无此人并返回,找到就让用户输入选课课程,并尝试用r方式打开该课程文件,如果返回null就提示没有该课并返回,如果打开成功就判断该课选课人数是否已满,满了就提示课满并返回,没满就用a+方式重新打开该文件,并把该学号及默认0分(不然算平均分会报错)填入并返回。
    代码如下:

    printf("请输入选课学生的学号:\n");
    scanf("%s",tstuId); 
    //查找该学生信息 
    fp = fopen("stuInfo.txt","r");
    int find = 0;
    while(!feof(fp)){
        fscanf(fp,"%s%s%s\n",stuId,stuName,stuSex);
        if(!strcmp(stuId,tstuId)){find = 1;break;}        //找到该学生信息 
    }
    fclose(fp);
    if(find){        //有该学生 
        printf("请输入目标课程名称(大小写无关):\n");
        scanf("%s",couName);
        strcpy(fileName,couName);
        strcat(fileName,".txt");
        if((fp = fopen(fileName,"a+"))!=NULL){        //找到该课程 
            fscanf(fp,"%s%s%d%d%lf\n",couId,couName,&couMax,&couIn,&avgScore);
            if(couIn<couMax){            //课程没满 
    			tfp = fopen("tmp.txt","w");
                fprintf(tfp,"%-10s%-10s%-5d%-5d%-5.2lf\n",couId,couName,couMax,couIn+1,(avgScore*couIn+0)/(couIn+1));
                while(!feof(fp)){
    		        fscanf(fp,"%s%d\n",stuId,&score);
    		        fprintf(tfp,"%-20s%-5d\n",stuId,score);
    		    }
                fprintf(tfp,"%-20s%-5d\n",tstuId,0);
                fclose(fp);
                fclose(tfp);
                remove(fileName);
                rename("tmp.txt",fileName);  
                printf("选课成功,为您跳转到首页……\n");
            }
            else{printf("该课程人数已满,选课失败,为您跳转到首页……\n");}
        }
        else{printf("档案中查无此课程,选课失败,为您跳转到首页……\n"); fclose(fp);}
    }
    else{printf("档案中查无此学生,选课失败,为您跳转到首页……\n");}
    Sleep(sleepTime);return;
    

    如果想查看其它操作流程可以查看下面源码,这里就不多介绍了。

    完整源码

    #include<stdio.h>
    #include<string.h>
    #include<windows.h>
    
    int length = 0;
    int Len = 50;        //边框宽
    int padding = 2;    //上下内边距
    int margin = 2;        //外边距
    int win = 1;        //如果是win10,就改为1,如果是win7,就改为2 
    int sleepTime = 1000;
    
    void mar();                    //输出左右外边距
    void pLine(char str[]);        //输出星线 
    void print(char str[]);        //输出一行 
    void borP(char str[]);        //按自动套边框的格式输出,如果框内要输出多行,就用&符连接 
    void ex();                    //退出程序 
    void stuOS();                //学生操作模块 
    void couOS();                //课程操作模块 
    void chooseOS();            //选课操作模块 
    void set();                    //设置边框属性 
    void init();                //程序初始化  
    
    int score,couMax,couIn;                                                               //成绩,课程最大人数,课程当前总人数 
    char couId[20],couName[20],stuId[20],stuName[20],stuSex[5];                       //课程编号,课程名,学生学号,学生姓名,学生性别 
    double avgScore;                                                                 //平均成绩
    char tcouName[20],fileName[25],tstuId[20],ttstuId[20],tstuName[20],tstuSex[5];     //替代参数 
    int tmp,tscore;
    
    int main(){
        int choose;
        init();        //初始化
         
        while(1){
            system("cls");        //清屏 
            borP("欢迎使用学生信息管理系统&&1.学生相关操作&2.课程相关操作&3.选课相关操作&4.设置        &0.退出系统    &&请输入您想要进行的操作序号");
            scanf("%d",&choose);
            switch(choose){
                case 0:{ex();break;}
                case 1:{stuOS();break;}
                case 2:{couOS();break;}
                case 3:{chooseOS();break;}
                case 4:{set();break;}
            }
        }
        
        return 0;
    }
    //如果不存在stuInfo.txt就创建一个,以防因为不存在stuInfo.txt文件而终止程序的情况 
    void init(){
        FILE *fp;
        fp = fopen("stuInfo.txt","a+");
        fclose(fp); 
    } 
    //学生相关操作 
    void stuOS(){
        FILE *fp,*tfp;
        int choose;
        int exit = 0;
        while(!exit){
            system("cls");
            borP("学生相关操作&&1.添加学生信息&2.删除学生信息&3.修改学生信息&4.查看学生信息&5.返回上一级  &0.退出系统    &&请输入您想要进行的操作序号");
            scanf("%d",&choose);
            switch(choose){
                case 1:{
                    fp = fopen("stuInfo.txt","a+");        //这里注意用a+,在末尾追加内容 
                    printf("请按照学号 姓名 性别顺序输入学生信息,每名学生占一行,以EOF结束录入。\n");
                    while(scanf("%s%s%s",stuId,stuName,stuSex)!=EOF){
                        fprintf(fp,"%-20s%-20s%-5s\n",stuId,stuName,stuSex);
                    }
                    printf("录入学生信息完毕,为您跳转到首页……\n");fclose(fp);Sleep(sleepTime);return;
                    break;
                }
                case 2:{
                    fp = fopen("stuInfo.txt","r");
                    printf("若档案中有此学生,其信息将被删除,否则您的操作不产生任何影响。\n");
                    printf("请输入您要删除信息的学生的学号:\n");
                    scanf("%s",tstuId);
                    printf("您确定要将学号为 %s 的学生的全部信息删除吗?1.确定 0.取消\n", tstuId);
                    printf("请输入选项序号1/0:\n");
                    if(scanf("%d",&tmp)==1&&tmp==1){
                        tfp = fopen("tmp.txt","w");
                        //查找该学生 
                        int find = 0; 
                        while(!feof(fp)){
                            fscanf(fp,"%s%s%s\n",stuId,stuName,stuSex);
                            //如果不是要删除的学生,就填入tmp.txt 
                            if(strcmp(stuId,tstuId))fprintf(tfp,"%-20s%-20s%-5s\n",stuId,stuName,stuSex);    
                            else find = 1;     
                        }
                        fclose(fp);
                        fclose(tfp);
                        remove("stuInfo.txt");
                        rename("tmp.txt","stuInfo.txt");
                        if(find)printf("删除学生信息成功,为您跳转到首页……\n");
                        else    printf("没有找到该学生信息,为您跳转到首页……\n");
                    }
                    else {
                        fclose(fp);printf("取消了删除,为您跳转到首页……\n");
                    }
                    Sleep(sleepTime);return;
                }
                case 3:{
                    fp = fopen("stuInfo.txt","r");
                    printf("若档案中有此学生,将重新录入其信息,否则将您录入的信息新增到档案中。\n");
                    printf("请输入您要修改信息的学生档案中的学号:\n");
                    scanf("%s", ttstuId);        //原学号,用于指定某个学生,因为后面学号可能也需要改 
                    printf("请按照学号 姓名 性别顺序输入该学生更新后的完整信息。\n");
                    printf("学号 姓名 性别\n");
                    scanf("%s%s%s",tstuId,tstuName,tstuSex);
                    printf("您确定要将学号为 %s 的学生的信息修改为'%s  %s  %s'吗?1.确定 0.取消\n", ttstuId,tstuId,tstuName,tstuSex);
                    printf("请输入选项序号1/0:\n");
                    if(scanf("%d",&tmp)==1&&tmp==1){
                        tfp = fopen("tmp.txt","w");
                        //查找该学生 
                        int find = 0; 
                        while(!feof(fp)){
                            fscanf(fp,"%s%s%s\n",stuId,stuName,stuSex);
                            //如果不是要修改的学生,就直接填入tmp.txt 
                            if(strcmp(stuId,ttstuId))fprintf(tfp,"%-20s%-20s%-5s\n",stuId,stuName,stuSex);    
                            else fprintf(tfp,"%-20s%-20s%-5s\n",tstuId,tstuName,tstuSex); 
                        }
                        fclose(fp);
                        fclose(tfp);
                        remove("stuInfo.txt");
                        rename("tmp.txt","stuInfo.txt");
                        printf("修改学生信息成功,为您跳转到首页……\n");
                    }
                    else {
                        fclose(fp);printf("取消了更改,为您跳转到首页……\n");
                    }    
                    Sleep(sleepTime);return;
                }
                case 4:{
                    printf("若档案中有重复学号或姓名的,将显示档案中位置靠前的学生信息。\n");
                    printf("请选择您要使用的学生查询模式:1.按学号查询 2.按姓名查询:\n");
                    scanf("%d",&tmp);
                    fp = fopen("stuInfo.txt","r");
                    if(tmp==1){
                        printf("请输入您要查询的学生的学号:\n");
                        scanf("%s",tstuId);
                        pLine("");                //输出横线做间隔,更美观 
                        printf("%-20s%-20s%-5s\n","学号","姓名","性别");
                        while(!feof(fp)){
                            fscanf(fp,"%s%s%s\n",stuId,stuName,stuSex);
                            if(!strcmp(stuId,tstuId))        //如果是要查找的学生信息 
                                printf("%-20s%-20s%-5s\n",stuId,stuName,stuSex);
                        }
                        pLine("");                //输出横线做间隔,更美观 
                        
                    }
                    else if(tmp==2){
                        printf("请输入您要查询的学生的姓名:\n");
                        scanf("%s",tstuName);
                        pLine("");
                        printf("%-20s%-20s%-5s\n","学号","姓名","性别");
                        while(!feof(fp)){
                            fscanf(fp,"%s%s%s\n",stuId,stuName,stuSex);
                            if(!strcmp(stuName,tstuName))        //如果是要查找的学生信息 
                                printf("%-20s%-20s%-5s\n",stuId,stuName,stuSex);
                        }
                        pLine("");
                    }
                    else{fclose(fp);printf("输入错误!为您跳转至首页……\n");Sleep(sleepTime);return;}
                    fclose(fp);
                    system("pause");return;
                } 
                case 5:exit = 1;break;
                case 0:ex();
            }
        }
    }
    //课程相关操作 
    void couOS(){
        FILE *fp,*tfp;
        int choose;
        int exit = 0;
        while(!exit){
            system("cls");
            borP("课程相关操作&&1.添加课程信息&2.删除课程信息&3.更改课程信息&4.查看课程信息&5.返回上一级  &0.退出系统    &&请输入您想要进行的操作序号");
            scanf("%d",&choose);
            switch(choose){
                case 1:{
                    printf("请按照  课程编号 课程名称 课程人数  顺序输入课程信息\n");
                    scanf("%s%s%d",couId,couName,&couMax);
                    strcpy(fileName,couName);
                    strcat(fileName,".txt");
                    if((fp = fopen(fileName,"r+"))!=NULL){        //r+如果打开失败不会创建文件,所以用它做判断 
                        printf("该课程已存在,录入失败,为您跳转到首页……\n");fclose(fp);
                    } 
                    else{
                        fclose(fp);
                        fp = fopen(fileName,"w");
                        fprintf(fp,"%-10s%-10s%-5d%-5d%-5.2lf\n",couId,couName,couMax,0,0.0);
                        fclose(fp);
                        printf("课程信息添加成功,为您跳转到首页……\n");
                    }
                    Sleep(sleepTime);return;
                } 
                case 2:{
                    printf("若档案中有此课程,其信息将被删除,否则您的操作不产生任何影响。\n");
                    printf("请输入您要删除的课程名(大小写不敏感):\n");
                    scanf("%s",couName);
                    strcpy(fileName,couName);
                    strcat(fileName,".txt");
                    if((fp = fopen(fileName,"r+"))!=NULL){        //存在该课程 
                        printf("您确定要将%s课程信息删除吗?1.确定 0.取消\n",  couName);
                        printf("请输入选项序号1/0:\n");
                        scanf("%d",&tmp);
                        if(tmp==1){fclose(fp);remove(fileName);printf("删除课程信息成功,为您跳转到首页……\n");Sleep(sleepTime);return;}
                        else {fclose(fp);printf("取消了删除,为您跳转到首页……\n");Sleep(sleepTime);return;    }
                    }
                    else{
                        printf("没有该课程,删除失败!为您跳转到首页……\n");fclose(fp);Sleep(sleepTime);return;
                    } 
                    break;
                }
                case 3:{
                    printf("若档案中有此课程,将重新录入其信息,否则您的操作不产生任何影响。\n");
                    printf("请输入您要修改信息的课程档案中的名称(大小写不敏感):\n");
                    scanf("%s",couName);
                    strcpy(fileName,couName);
                    strcat(fileName,".txt");
                    if((fp = fopen(fileName,"r"))!=NULL){        //存在该课程 
                        tfp = fopen("tmp.txt","w");
                        fscanf(fp,"%s%s%d%d%lf\n",couId,couName,&couMax,&couIn,&avgScore);
                        printf("请按照课程编号 课程名称 课程人数顺序输入新的课程信息。\n");
                        printf("课程编号    课程名称    课程人数\n");
                        scanf("%s%s%d",couId,couName,&couMax);
                        
                        fprintf(tfp,"%-10s%-10s%-5d%-5d%-5.2lf\n",couId,couName,couMax,couIn,avgScore);            //写入tmp.txt 
                        while(!feof(fp)){
                            fscanf(fp,"%s%d\n",stuId,&score);
                            fprintf(tfp,"%-20s%-5d\n",stuId,score);
                        }
                        fclose(fp);
                        fclose(tfp);
                        remove(fileName);
                        strcpy(fileName,couName);
                        strcat(fileName,".txt");
                        rename("tmp.txt",fileName);        //将tmp.txt替换为fileName文件 
                        printf("课程信息更改成功,为您跳转到首页……\n\n");Sleep(sleepTime);return;
                    }
                    else{printf("没有该课程,打开失败!为您跳转到首页……\n");fclose(fp);Sleep(sleepTime);return;}
                    break;
                }
                case 4:{
                    printf("请输入您要查看信息的课程档案中的名称(大小写不敏感):\n");
                    scanf("%s",couName);
                    strcpy(fileName,couName);
                    strcat(fileName,".txt");
                    if((fp = fopen(fileName,"r+"))!=NULL){
                        fscanf(fp,"%s%s%d%d%lf",couId,couName,&couMax,&couIn,&avgScore);
                        fclose(fp);
                        printf("课程信息如下:\n课程编号:%s 课程名称:%s\n课程容量:%d 已选人数:%d 平均分:%d\n", couId, couName, couMax, couIn, avgScore);
                        system("pause");fclose(fp);return;
                    }
                    else{
                        printf("该课程不存在,为您跳转到首页……\n");fclose(fp);Sleep(sleepTime);return;
                    }
                    break;
                } 
                case 5:exit = 1;break;
                case 0:{
                    ex();
                    break;
                }
            }
        } 
    } 
    
    //选课相关操作 
    void chooseOS(){
        FILE *fp,*tfp;
        int choose;
        int exit = 0;
        
        while(!exit){
            system("cls");
            borP("选课相关操作&&1.选课        &2.退选        &3.成绩录入    &4.查看选课信息&5.返回上一级  &0.退出系统    &&请输入您想要进行的操作序号");
            scanf("%d",&choose);
            switch(choose){
                case 1:{
                    printf("请输入选课学生的学号:\n");
                    scanf("%s",tstuId); 
                    //查找该学生信息 
                    fp = fopen("stuInfo.txt","r");
                    int find = 0;
                    while(!feof(fp)){
                        fscanf(fp,"%s%s%s\n",stuId,stuName,stuSex);
                        if(!strcmp(stuId,tstuId)){find = 1;break;}        //找到该学生信息 
                    }
                    fclose(fp);
                    if(find){        //有该学生 
                        printf("请输入目标课程名称(大小写无关):\n");
                        scanf("%s",couName);
                        strcpy(fileName,couName);
                        strcat(fileName,".txt");
                        if((fp = fopen(fileName,"a+"))!=NULL){        //找到该课程 
                            fscanf(fp,"%s%s%d%d%lf\n",couId,couName,&couMax,&couIn,&avgScore);
                            if(couIn<couMax){            //课程没满 
        						tfp = fopen("tmp.txt","w");
                                fprintf(tfp,"%-10s%-10s%-5d%-5d%-5.2lf\n",couId,couName,couMax,couIn+1,(avgScore*couIn+0)/(couIn+1));
                                while(!feof(fp)){
    						        fscanf(fp,"%s%d\n",stuId,&score);
    						        fprintf(tfp,"%-20s%-5d\n",stuId,score);
    						    }
                                fprintf(tfp,"%-20s%-5d\n",tstuId,0);
                                fclose(fp);
                                fclose(tfp);
                                remove(fileName);
                                rename("tmp.txt",fileName);  
                                printf("选课成功,为您跳转到首页……\n");
                            }
                            else{printf("该课程人数已满,选课失败,为您跳转到首页……\n");}
                        }
                        else{printf("档案中查无此课程,选课失败,为您跳转到首页……\n"); fclose(fp);}
                    }
                    else{printf("档案中查无此学生,选课失败,为您跳转到首页……\n");}
                    Sleep(sleepTime);return;
                }
                case 2:{
                    printf("请输入退课学生的学号:\n");
                    scanf("%s",tstuId); 
                    //查找该学生信息 
                    fp = fopen("stuInfo.txt","r");
                    int find = 0;
                    while(!feof(fp)){
                        fscanf(fp,"%s%s%s\n",stuId,stuName,stuSex);
                        if(!strcmp(stuId,tstuId)){find = 1;break;}        //找到该学生信息 
                    }
                    fclose(fp);
                    if(find){        //有该学生 
                        printf("请输入目标课程名称(大小写无关):\n");
                        scanf("%s",couName);
                        strcpy(fileName,couName);
                        strcat(fileName,".txt");
                        if((fp = fopen(fileName,"r"))!=NULL){        //找到该课程 
                            fscanf(fp,"%s%s%d%d%lf\n",couId,couName,&couMax,&couIn,&avgScore);
                            if(couIn>0){            //课程有人 
                                //获取该学生成绩 
                                int findStu = 0;
                                while(!feof(fp)){
                                    fscanf(fp,"%s%d",stuId,&score);
                                    if(!strcmp(stuId,tstuId)){findStu = 1;break;}    //找到该学生 
                                }
                                fclose(fp);
                                if(findStu){            //该课程存在该学生 
                                    fp = fopen(fileName,"r");
                                    fscanf(fp,"%s%s%d%d%lf\n",couId,couName,&couMax,&couIn,&avgScore);
                                    tfp = fopen("tmp.txt","w");
                                    //
                                    fprintf(tfp,"%-10s%-10s%-5d%-5d%-5.2lf\n",couId,couName,couMax,couIn-1,couIn-1==0?0.0:(avgScore*couIn-score)/(couIn-1));
                                    while(!feof(fp)){
                                        fscanf(fp,"%s%d\n",stuId,&score);
                                        if(!strcmp(stuId,tstuId))continue;        //如果是要退课的这位学生,就跳过 
                                        fprintf(tfp,"%-20s%-5d\n",stuId,score);
                                    }
                                    fclose(fp);
                                    fclose(tfp);
                                    remove(fileName);
                                    rename("tmp.txt",fileName);        //将tmp.txt替换为fileName文件 
                                    printf("退课成功,为您跳转到首页……\n");Sleep(sleepTime);return;
                                }
                                else{printf("该学生没有选该课程,退课失败,为您跳转到首页……\n");Sleep(sleepTime);return;}
                                
                            }
                            else{printf("当前没有人选该课程,退课失败,为您跳转到首页……\n");Sleep(sleepTime);return;}
                        }
                        else{printf("档案中查无此课程,选课失败,为您跳转到首页……\n"); fclose(fp);Sleep(sleepTime);return;}
                    }
                    else{printf("档案中查无此学生,选课失败,为您跳转到首页……\n");Sleep(sleepTime);return;}
                    break;
                }
                case 3:{
                    printf("请输入目标课程的名称(大小写不敏感):\n");
                    scanf("%s",couName);
                    strcpy(fileName,couName);
                    strcat(fileName,".txt");
                    if((fp = fopen(fileName,"r"))!=NULL){        //存在该课程 
                        printf("请输入目标学生的学号:\n");
                        scanf("%s",tstuId);
                        fscanf(fp,"%s%s%d%d%lf\n",couId,couName,&couMax,&couIn,&avgScore);
                        //在课程里查找该学生
                        int findStu = 0; 
                        while(!feof(fp)){
                            fscanf(fp,"%s%d\n",stuId,&score);
                            if(!strcmp(stuId,tstuId)){findStu = 1;break;}
                        }
                        fclose(fp);
                        if(findStu){        //该课程存在该学生 
                            printf("请输入该学生的%s成绩:\n",couName);
                            scanf("%d",&tscore);
                            //往tmp里录入成绩 
                            fp = fopen(fileName,"r");
                            tfp = fopen("tmp.txt","w");
                            fscanf(fp,"%s%s%d%d%lf\n",couId,couName,&couMax,&couIn,&avgScore);
                            //(总分-修改原分 +修改分数)/总人数 
                            fprintf(tfp,"%-10s%-10s%-5d%-5d%-5.2lf\n",couId,couName,couMax,couIn,(avgScore*couIn-score+tscore)/couIn);    
                            while(!feof(fp)){
                                fscanf(fp,"%s%d\n",stuId,&score);
                                if(!strcmp(stuId,tstuId)){
                                    fprintf(tfp,"%-20s%-5d\n",stuId,tscore);
                                }
                                else fprintf(tfp,"%-20s%-5d\n",stuId,score);
                            }
                            fclose(fp);
                            fclose(tfp);
                            remove(fileName);
                            rename("tmp.txt",fileName);        //将tmp.txt替换为fileName文件 
                            printf("课程信息更改成功,为您跳转到首页……\n\n");Sleep(sleepTime);return;
                        }
                        else{printf("该学生没有选该课程,退课失败,为您跳转到首页……\n");Sleep(sleepTime);return;}
                    }
                    else{printf("档案中查无此课程,选课失败,为您跳转到首页……\n"); fclose(fp);Sleep(sleepTime);return;}
                    break;
                }
                case 4:{
                    printf("请输入目标课程的名称(大小写不敏感):\n");
                    scanf("%s",couName);
                    strcpy(fileName,couName);
                    strcat(fileName,".txt");
                    if((fp = fopen(fileName,"r"))!=NULL){        //存在该课程 
                        printf("该课程总体信息如下\n");
                        fscanf(fp,"%s%s%d%d%lf\n",couId,couName,&couMax,&couIn,&avgScore);
                        printf("已选这门课程的学生学号及成绩信息如下:\n%-20s%-5s\n","学号","成绩");
                        while(!feof(fp)){
                            fscanf(fp,"%s%d\n",stuId,&score);
                            printf("%-20s%-5d\n",stuId,score);
                        }
                        system("pause");fclose(fp);return;
                    }
                    else{printf("档案中查无此课程,选课失败,为您跳转到首页……\n"); fclose(fp);Sleep(sleepTime);return;}
                    break;
                    
                }
                case 5:exit = 1;break;
                case 0: ex();
            }
        }
    }
    int getnum(int min,int max){
        int num;
        printf("请输入%d-%d之间的整数:\n",min,max);
        scanf("%d",&num); 
        while(num<min||num>max){
            printf("输入不合法,请重新输入:\n");
            scanf("%d",&num);
        }
        return num;
    }
    //设置 
    void set(){
        int choose;
        int num,tnum;
        do{
            system("cls");
            borP("设置&&1、内部边距&2、外部边距&3、边框宽度&4、指定系统&0、返回菜单");
            printf("请选择:");
            scanf("%d",&choose);
            switch(choose){
                case 1:
                    padding = getnum(0,6);break;
                case 2:
                    margin = getnum(0,8);break;
                case 3:
                    Len = getnum(30,60);break;
                case 4:{
                    printf("win10请改为1,win7请改为2\n");
                    win = getnum(1,2);break;
                    break;
                }
                case 0:
                    return;
            }
            system("cls");borP("修改成功!");Sleep(sleepTime);system("cls"); 
        }while(1);
    }
    
    //退出 
    void ex(){
        system("cls");
        borP("感谢您的使用&祝您生活愉快&再见!");
        exit(0);        //终止程序 
    }
    //输出左右外边距 
    void mar(){
        int i = 0;
        for(;i < margin;i++)printf("  ");
    }
    
    //输出星线 
    void pLine(char str[]){
        int i;
        int s_len = 0;
        //mar();printf(" ");
        for(i = 0;str[i];i++)s_len++;
        for(i = 0;i < (Len-s_len)/2;i++)printf("*");
        printf("%s",str);
        for(i = 0;i < (Len-s_len)/2;i++)printf("*");
        printf("\n");
    }
    
    //输出一行 
    void print(char str[]){
        int i,s_len = 0;
        for(i = 0;str[i];i++)s_len++;
        mar();        //每行先输出外边距 
        printf("│");
        for(i = 0;i < (Len-s_len)/2;i++)printf(" ");
        printf("%s",str);
        s_len = s_len%2?s_len-1:s_len;
        for(i = 0;i < (Len-s_len)/2;i++)printf(" ");
        printf("│\n");
    }
    
    //按自动套边框的格式输出,如果框内要输出多行,就用&符连接 
    void borP(char str[]){
        int i,s_len = 0;
        int begin = 0;        //子串从str的哪个元素下标开始复制 
        char substr[100];
        substr[0] = '\0';        //初始化
        for(i = 0;i < margin;i++)printf("\n");
        mar();printf("┌");for(i = 0;i < Len/win;i++)printf("─");printf("┐\n");
        for(i = 0;i < padding;i++)print("");
        for(i = 0;1;i++){
            if(str[i]=='&'){substr[i-begin] = '\0';begin = i+1;print(substr);substr[0] = '\0';}
            substr[i-begin] = str[i]; 
            if(str[i] == '\0'){substr[i-begin] = '\0';print(substr);break;}
        }
        for(i = 0;i < padding;i++)print("");
        mar();printf("└");for(i = 0;i < Len/win;i++)printf("─");printf("┘\n");
        for(i = 0;i < margin;i++)printf("\n");
    }
    
    展开全文
  • 本人自己的C语言期末大作业,有需要参考的可以自行下载。 含实验报告,纯自制。 注: 本程序没有登录机制,打开即用; 本程序不含输入数据的约束,请注意输入数据输入格式是否符合要求; 请将压缩包里的所有文件解压...
  • C语言写的工资管理系统,具备管理员模式和普通员工模式,管理员模式需要输入密码,具有增、删、改、查、统计等功能;普通员工具有查看当前ID员工的工资信息,具有返回主菜单功能;代码易懂。
  • 大一写的结课作业,代码用到了指针、文件、数组、结构体、函数,包括增删改查、保存信息到文件和成绩排名等功能,欢迎大家下载使用。
  • C语言案例课程设计期末大作业,大一的时候写的期末大作业报告
  • C语言程序设计大作业 200行代码 内含题目、代码、报告、Readme文件 满分无抄袭
  • C语言大作业晨午检学生信息管理系统源码。 C语言 学生晨午检信息管理系统,支持读取csv文档、空白格读取。带头双链表存储结构;支持用户的读写操作,已填报学生信息不可更改; 可以用于应付C语言课程作业,支持修改...
  • C语言期末作业学生成绩管理系统(免积分下载) 1.主界面:“1.学生登录”“2.教师登录”“3.校长登录”“0.退出系统”,4个选项进行跳转。(main.c) 2.1 选择1,跳转“学生登录界面”,输入学号及默认密码(三次错误...
  • 运动会管理系统(免积分下载),源码和3000多字的设计文档非常详细,代码注释非常详细,详细情况请看我的文章介绍。主菜单功能如下: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * *...
  • 本科大学c语言大作业,学校班车管理系统,可以输入客车的录入和乘客的录入,预约。多方法查询乘客和客车。本人能菜,虽然写了1000多行,免费上传,供大家参考学习。有很多不足,望指正!
  • 这是常见的C语言大作业,编程实现了菜单式学生成绩管理系统,功能包括排序、插入、查找、删除、统计,存盘、读入等功能,代码逻辑清晰,容易看懂,源码还包含丰富的注释。另有一份15页的程序设计文档可供参考。
  • C语言课程设计期末大作业校医院管理系统源码+报告,纯手打高分项目 本系统采用C语言编写,分为用户端和医生端,主要实现预约和查找功能。其中数据存储采用数据流的方式存储为文本文档,读取时采用链表来方便增删...
  • C语言初学者的课程设计,适用于大一新生,方便好用。包括实验报告和源代码。
  • 实现了一个界面美观,功能齐全的航班管理系统 struct plane//定义航班结构体 { int airnum;//航班号 int maxsize;//最大载客数 char start[20];//起飞地点 char time1[20];//起飞时间 char end[20];//降落...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,541
精华内容 7,416
关键字:

c语言大作业管理系统