最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c語言實現(xiàn)學生管理系統(tǒng)詳解

 更新時間:2021年12月19日 17:00:11   作者:如風暖陽  
這篇文章主要為大家介紹了c語言實現(xiàn)學生管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>
      該學生管理系統(tǒng)的實現(xiàn)是通過分文件的方式來寫的,infor.h
  文件為頭文件,源文件infor.c實現(xiàn)源文件test.c中封裝函數(shù),建議
  讀者在做較大的系統(tǒng)是分文件來實現(xiàn),可以提高代碼的運行效率。
  (該學生管理系統(tǒng)由b站鵬哥c語言通訊錄視頻改進而來)

infor.h

//頭文件 實現(xiàn)引用函數(shù)頭文件,定義常量,以及源文件中封裝函數(shù)的聲明

#define  _CRT_SECURE_NO_WARNINGS   1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <windows.h>
#define MAX_NAME 20               //都用define定義 為了后期的可改性
#define MAX_SEX 10
#define MAX_TELE 15
#define MAX_ADDR 30   
#define begin 3					//初始開辟動態(tài)內(nèi)存容量
#define add 2					//每次容滿后增容數(shù)量
//#define MAX 1000
typedef struct Student           //定義學生信息結(jié)構(gòu)體變量
{
	char name[MAX_NAME];
	char sex[MAX_SEX];
	int age;
	char tele[MAX_TELE];
	char addr[MAX_ADDR];
}Student;
//typedef struct student          //結(jié)構(gòu)體套結(jié)構(gòu)體
//{
//	Student data[MAX];			//存放添加進來的個人信息
//	int sz;						//記錄當前系統(tǒng)中有效信息個數(shù)
//}student;
typedef struct student          //結(jié)構(gòu)體嵌套結(jié)構(gòu)體  
{
	Student*data;			//指向動態(tài)申請空間,用來存放個人信息
	int sz;					//記錄當前系統(tǒng)中有效信息個數(shù)
	int capacity;			//記錄當前通訊錄最大容量
}student;
void Initstudent(student*pc);//初始化結(jié)構(gòu)體
void ADDstudent(student* pc);//增加學生信息
void PRINTstudent(student* pc);//瀏覽學生信息
void SEARCHstudent(student* pc);//查找學生信息
void MODIFYstudent(student* pc);//修改學生信息
void DELETEstudent(student* pc);//刪除學生信息
void DESETORYstudent(student* pc);//銷毀學生信息

test.c

//主文件的測試 該文件為實現(xiàn)學生管理系統(tǒng)的核心

#define  _CRT_SECURE_NO_WARNINGS   1
#include"infor.h"                     //注意分文件寫時  源文件中都需要引用頭文件
void menu()
{
	system("color fc");
	printf("\n");
	printf("\n");
	printf("\n");
	printf("		***********鄭州輕工業(yè)大學學生信息管理系統(tǒng)************\n");
	printf("		*-------0.退出                 1.增加學生信息-------*\n");
	printf("		*-------2.瀏覽學生信息         3.查找學生信息-------*\n");
	printf("		*-------4.修改學生信息         5.刪除學生信息-------*\n");
	printf("		*****************************************************\n");
	printf("\n");
	printf("\n");
	printf("\n");
}
enum option
{                         //通過枚舉常量,使得主函數(shù)中的switch語句更明了的實現(xiàn)不同的功能
	EXIT,
	ADD,
	PRINT,
	SEARCH,
	MODIFY,
	Delete
};
int main()
{
	int input = 0;
	student stu;
	Initstudent(&stu);			//結(jié)構(gòu)體數(shù)組的初始化
	do
	{
		menu();
		printf("請選擇:>\n");
		scanf("%d", &input);
		switch(input)					//封裝多個函數(shù)實現(xiàn)多個功能
		{						//函數(shù)的聲明位于頭文件中,實現(xiàn)在infor.c中實現(xiàn)
		case EXIT:
			DESETORYstudent(&stu);
			printf("退出系統(tǒng)\n");
			break;
		case ADD:
			ADDstudent(&stu);
			break;
		case PRINT:
			PRINTstudent(&stu);
			break;
		case SEARCH:
			SEARCHstudent(&stu);
			break;
		case MODIFY:
			MODIFYstudent(&stu);
			break;
		case Delete:
			DELETEstudent(&stu);
			break;
		default:
			printf("選擇錯誤,重新選擇\n");
			break;
		}
	} while (input);
	return 0;
}

infor.c

//該文件為test.c中封裝函數(shù)的實現(xiàn)

#define  _CRT_SECURE_NO_WARNINGS   1
#include"infor.h"
//靜態(tài)
//void Initstudent(student* pc)
//{
//	pc->sz = 0;
//	memset(pc->data, 0, sizeof(pc->data));//memset()內(nèi)存設置 使整個結(jié)構(gòu)體數(shù)組初始化
//}
//動態(tài)
void Initstudent(student* pc)
{
	//指針data維護開辟的動態(tài)內(nèi)存空間 calloc初始化開辟空間
	pc->data = (Student*)calloc(begin,sizeof(Student));   
	pc->sz = 0;							//sz為有效信息個數(shù)			 
	pc->capacity = begin;				//定義目前容量為初始容量
}
void ADDstudent(student* pc)
{
	if (pc->sz == pc->capacity)  //容量滿了完成增容
	{
		Student* ptr = (Student*)realloc(pc->data, (pc->capacity + add)*sizeof(Student));
		if (ptr != NULL)
		{
			pc->data = ptr;
			pc->capacity += add;
			printf("~~~增容成功~~~\n");
		}
		else
		{
			perror("ADDstudent");//失敗報錯
			printf("增加聯(lián)系人失敗\n");
			return;
		}
	}
	//增加一個人的信息
	printf("請輸入姓名:\n");
	scanf("%s", pc->data[pc->sz].name);
	printf("請輸入性別:\n");
	scanf("%s", pc->data[pc->sz].sex);
	printf("請輸入年齡:\n");
	scanf("%d", &(pc->data[pc->sz].age));
	printf("請輸入電話:\n");
	scanf("%s", pc->data[pc->sz].tele);
	printf("請輸入地址:\n");
	scanf("%s", pc->data[pc->sz].addr);
	pc->sz++;
	printf("增加成功\n");
}
void DESETORYstudent(student* pc)   //銷毀個人信息
{
	free(pc->data);					//釋放內(nèi)存
	pc->data = NULL;				//回歸為0
	pc->capacity = 0;
	pc->sz = 0;
}
//void ADDstudent(student* pc)
//{
//	if (pc->sz == MAX)
//	{
//		printf("通訊錄已滿,無法添加\n");
//		return;
//	}
//	//增加一個人的信息
//	printf("請輸入姓名:\n");
//	scanf("%s", pc->data[pc->sz].name);
//	printf("請輸入性別:\n");
//	scanf("%s", pc->data[pc->sz].sex);
//	printf("請輸入年齡:\n");
//	scanf("%d", &(pc->data[pc->sz].age));
//	printf("請輸入電話:\n");
//	scanf("%s", pc->data[pc->sz].tele);
//	printf("請輸入地址:\n");
//	scanf("%s", pc->data[pc->sz].addr);
//	pc->sz++;
//	printf("增加成功\n");
//}
void PRINTstudent(student* pc)
{
	int i = 0;
	printf("%-10s%-10s%-10s%-15s%-30s\n", "姓名", "性別", "年齡", "電話", "地址");
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-10s%-10s%-10d%-15s%-30s\n",
			pc->data[i].name,
			pc->data[i].sex,
			pc->data[i].age,
			pc->data[i].tele,
			pc->data[i].addr
		);
	}
}
static int Findbyname(student* pc, char name[])			//通過名字來查找學生   stadic靜態(tài)局部變量  該函數(shù)只在本文件中應用  保護該函數(shù)
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		if (strcmp(pc->data[i].name, name) == 0)     //利用strcmp函數(shù)的返回值判斷是否找到了該人
		{
			return i;								//找到了就返回學生信息的角標
		}
	}
	return -1;										//沒找到
}
void SEARCHstudent(student* pc)
{
	char name[MAX_NAME] = { 0 };
	printf("請輸入要查找學生姓名:\n");
	scanf("%s", name);
	int end = Findbyname(pc, name);
	if (end == -1)
	{
		printf("你所要查找的人不存在");
	}
	else
	{
		printf("%-10s%-10s%-10s%-15s%-30s\n", "姓名", "性別", "年齡", "電話", "地址");
		printf("%-10s%-10s%-10d%-15s%-30s\n",			//Findbuname函數(shù)如果找到對應學生,返回對應下標,輸出對應下標學生信息
			pc->data[end].name,
			pc->data[end].sex,
			pc->data[end].age,
			pc->data[end].tele,
			pc->data[end].addr
		);
	}
}
void MODIFYstudent(student* pc)
{
	char name[MAX_NAME] = { 0 };
	printf("請輸入要修改學生信息的學生姓名:\n");
	scanf("%s", name);
	int end = Findbyname(pc, name);
	if (end == -1)
	{
		printf("你所要修改學生信息的人不存在");
	}
	else
	{
		printf("請輸入性別:\n");
		scanf("%s", pc->data[end].sex);
		printf("請輸入年齡:\n");
		scanf("%d", &(pc->data[end].age));
		printf("請輸入電話:\n");
		scanf("%s", pc->data[end].tele);
		printf("請輸入地址:\n");
		scanf("%s", pc->data[end].addr);
		printf("修改成功\n");
	}
}
void DELETEstudent(student* pc)
{
	char name[MAX_NAME] = { 0 };
	printf("請輸入要刪除學生信息的學生姓名:\n");
	scanf("%s", name);
	int end = Findbyname(pc, name);
	if (end == -1)
	{
		printf("你所要刪除學生信息的人不存在");
	}
	int i = 0;
	for (i = end; i < pc->sz - 1; i++)
	{
		pc->data[i] = pc->data[i + 1];
	}
	pc->sz--;
	printf("刪除成功");
}

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 詳解Ubuntu18.04配置VSCode+CMake的C++開發(fā)環(huán)境

    詳解Ubuntu18.04配置VSCode+CMake的C++開發(fā)環(huán)境

    這篇文章主要介紹了詳解Ubuntu18.04配置VSCode+CMake的C++開發(fā)環(huán)境,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Visual?Studio?2022編譯C++20代碼

    Visual?Studio?2022編譯C++20代碼

    本文主要介紹了Visual?Studio?2022編譯C++20代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • wxWidgets實現(xiàn)圖片和文件按鈕

    wxWidgets實現(xiàn)圖片和文件按鈕

    這篇文章主要為大家詳細介紹了wxWidgets實現(xiàn)圖片和文件按鈕,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 基于C++實現(xiàn)酒店管理系統(tǒng)

    基于C++實現(xiàn)酒店管理系統(tǒng)

    這篇文章主要為大家詳細介紹了基于C++實現(xiàn)酒店管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言 野指針與空指針專篇解讀

    C語言 野指針與空指針專篇解讀

    全網(wǎng)最接地氣的C語言野指針介紹,此處對于野指針與空指針知識點做一些簡要的介紹,作者實屬初學,寫博客也是作者學習的一個過程,難免文章中有內(nèi)容理解不到位或者有不當之處,還請朋友們不吝指正,希望大家多多給予支持,贈人玫瑰,手有余香
    2021-11-11
  • Qt為exe添加ico圖片的簡單實現(xiàn)步驟

    Qt為exe添加ico圖片的簡單實現(xiàn)步驟

    這篇文章主要給大家介紹了關(guān)于Qt為exe添加ico圖片的簡單實現(xiàn)步驟,通過文中介紹的方法可以幫助大家實現(xiàn)這個自定義exe圖標的效果,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • C/C++詳解如何實現(xiàn)文件備份

    C/C++詳解如何實現(xiàn)文件備份

    這篇文章主要介紹了C/C++詳解如何實現(xiàn)文件備份,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • c語言實現(xiàn)詞頻統(tǒng)計的簡單實例

    c語言實現(xiàn)詞頻統(tǒng)計的簡單實例

    下面小編就為大家?guī)硪黄猚語言實現(xiàn)詞頻統(tǒng)計的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • C語言基礎隱式類型轉(zhuǎn)換與強制類型轉(zhuǎn)換示例解析

    C語言基礎隱式類型轉(zhuǎn)換與強制類型轉(zhuǎn)換示例解析

    最接地氣的有關(guān)類型轉(zhuǎn)換的介紹,此處對于類型轉(zhuǎn)換的相關(guān)知識點做一些簡要的介紹,作者實屬初學,難免文章中有內(nèi)容理解不到位或者有不當之處,還請朋友們不吝指正,希望大家多多給予支持
    2021-11-11
  • C++之預處理功能詳解

    C++之預處理功能詳解

    預處理器是 C++ 編譯器提供的一個工具,允許程序員在編譯之前對源代碼文件做出修改,本文將給大家通過代碼示例詳細介紹C++的預處理功能,需要的朋友可以參考下
    2023-05-05

最新評論

花莲县| 加查县| 栾川县| 镶黄旗| 汨罗市| 黔西县| 卓尼县| 普兰县| 迁安市| 定西市| 都兰县| 梧州市| 鄱阳县| 来安县| 柳林县| 宁蒗| 民乐县| 本溪市| 台南市| 什邡市| 丰城市| 新闻| 白山市| 平阳县| 陈巴尔虎旗| 彭水| 东丰县| 盐源县| 延吉市| 柞水县| 惠州市| 耿马| 南昌县| 皋兰县| 绥棱县| 册亨县| 高碑店市| 汉中市| 龙江县| 荆门市| 朝阳区|