亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 通訊錄.c

?? 這個代碼是用C語言編寫的
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 *File: 通訊錄.c
 *--------------------------
 *本程序采用結(jié)構(gòu)數(shù)組方式編寫,目前可以存儲1000條信息,每條信息中包含6項子信息。
 *程序在運行時會要求用戶輸入文件名,然后把文件中的信息讀取到數(shù)組(內(nèi)存)中。
 *因此用戶在程序運行時對記錄所做的任何修改均是對數(shù)組元素內(nèi)容的的修改,這些修改
 *只有在用戶執(zhí)行保存指令或者退出程序的時候才會保存到文件中。
 *文件中的記錄采用從0開始的編碼方式,即每條記錄均與相同下標的數(shù)組元素對應。
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MaxElement 1000
#define Namelength 25

/*類型定義*/
typedef enum{false, true}bool;

typedef struct{
	int n;
	char *name;
	char *number;
	char *flatnum;
	char *cellphone;
	char *qqnum;
	char *address;
}*oneRecord;

typedef struct{
	oneRecord classmates[MaxElement];
	int matesnum;
}*records;

/*函數(shù)聲明*/
void AddRecord(records db);
oneRecord AddToRecord(int n);
void PrintRecord(FILE *infile, records db);
void GiveInstruction(int num, char *filename);
void DeleteRecord(records db);
void ChangeRecord(records db);
void SearchRecord(records db);
void *GetBlock(size_t nbytes);
void UpdateRecord(char *filename, FILE *infile, records db);
void Guide(void);
FILE *OPENFile(char *filename);
void ScanRecord(FILE *infile, records db);
void RangeRecord(records db);

/*主程序*/
int main()
{
	Guide();
	system ("pause");
	return 0;
}


/*
 *Function: Guide
 *Usage: Guide();
 *----------------------------------
 *這個函數(shù)是本程序的主要框架,在用戶輸入文件名后,
 *函數(shù)會給出程序的指令代碼,并根據(jù)用戶的選擇來作出反應
 *目前本程序共有8項功能。
 */

void Guide(void)
{
	FILE *infile, *outfile;   //聲明兩個變量以區(qū)分讀寫
	records db;
	char *line, *string, *newname;
	int code;

	string = (char *)GetBlock(100 * sizeof(char));
	printf("請輸入要創(chuàng)建或打開的文件名:");
	gets(string);
	infile = outfile = OPENFile(string);
	db = (records)GetBlock(sizeof *db);
	db->matesnum = 0;
	line = GetBlock(100 * sizeof(char));
	if(fgets(line, 100, infile) == NULL){    //判斷文件是否為新文件
		fprintf(outfile, "%s\n", "姓名:   學號:    宿舍:    手機:     QQ:       住址:   ");
	}else{
		ScanRecord(infile, db);
	}
	while(true){
		rewind(infile);   //因用戶要使用的功能未知,故使用文件指針復位返回初始狀態(tài)
		rewind(outfile);
		GiveInstruction(db->matesnum, string);
		printf("請輸入命令代號:");
		scanf("%d", &code);
		if(code == 9) {   //當用戶要退出程序時,自動保存記錄,然后退出
			UpdateRecord(string, outfile, db);
			break;
		}
		switch(code){     //功能選擇
			case 1: 
				AddRecord(db);
				break;
			case 2:
				DeleteRecord(db);
				break;
			case 3:
				SearchRecord(db);
				break;
			case 4: 
				PrintRecord(infile, db);
				break;
			case 5:
				ChangeRecord(db);
				break;
			case 6:
				RangeRecord(db);
				break;
			case 7:
				UpdateRecord(string, outfile, db);
				printf("保存完畢。\n");
				infile = outfile = OPENFile(string);
				fgets(line, 100, infile);
				ScanRecord(infile, db);
				break;
			case 8:
				printf("請輸入新文件名(帶擴展名):");
				newname = (char *)GetBlock(Namelength * sizeof(char));
				scanf("%24s", newname);
				getchar();
				fclose(infile);
				fclose(outfile);
				if(rename(string, newname) != 0){
					printf("文件重命名失敗。\n");
					infile = outfile = OPENFile(string);
					break;
				}
				string = newname;
				infile = outfile = OPENFile(string);
				printf("文件重命名成功。\n");
				break;
			default:
				printf("錯誤指令,請重新輸入.\n");
				break;
		}
	}
	fclose(infile);      //關(guān)閉文件
	fclose(outfile);
}

/*
 *Function: 0PENFile
 *Usage: infile = OPENFile(filename);
 *--------------------------------------
 *這個函數(shù)從用戶處獲得文件名后將其打開
 *若文件不存在則會創(chuàng)建一個新文件
 *如果無法打開或創(chuàng)建文件,函數(shù)會報錯,并退出程序
 */

FILE *OPENFile(char *filename)
{
	FILE *file;

	file = fopen(filename, "a+");
	if(file == NULL){
		printf("無法打開文件!\n");
		system ("pause");
		exit (0);
	}
	return (file);
}

/*
 *Function: AddRecord
 *Usage: AddRecord(db, db->matesnum);
 *--------------------------------------
 *這個函數(shù)可以往記錄表中添加記錄
 *用戶可以選擇添加的位置,并可重復調(diào)用該函數(shù)
 *以達到添加多條記錄的目的
 */

void AddRecord(records db)
{
	int answer, i;
	oneRecord result;

	printf("目前菜單:增加記錄。確定增加請輸入1,返回上一級菜單請輸入0:");
	while(true){
		scanf("%d", &answer);
		getchar();
		if(answer == 0 || answer == 1) break;
		printf("輸入錯誤!請重新輸入:");
	}
	if(!answer) return;  //當用戶輸入0時
	printf("是否添加到最后(是 1/否 0)?");
	while(true){
		scanf("%d", &answer);
		getchar();
		if(answer == 0 || answer == 1) break;
		printf("輸入錯誤!請重新輸入:");
	}
	if(answer){
		result = AddToRecord(db->matesnum);
		printf("輸入成功!\n");
		db->classmates[db->matesnum] = result;
		db->matesnum++;
	}else{
		printf("是否添加到開始(是 1/否 0)?");
		while(true){
			scanf("%d", &answer);
			getchar();
			if(answer == 0 || answer == 1) break;
			printf("輸入錯誤!請重新輸入:");
		}
		if(answer){   //如果用戶輸入1
			result = AddToRecord(0);
		    printf("輸入成功!\n");
			for(i = 0; i < db->matesnum; i++){
				db->classmates[i]->n++;
			}
			for(i = db->matesnum; i > 0; i--){
				db->classmates[i] = db->classmates[i - 1];
			}
            db->classmates[0] = result;
			db->matesnum++;
		}else{
			printf("添加為第幾條?");
			scanf("%d", &answer);
			getchar();
			result = AddToRecord(answer);
			for(i = answer; i < db->matesnum; i++){     //將從answer開始的記錄的編號后移1個單位
				db->classmates[i]->n++;
			}
			for(i = db->matesnum; i > answer; i--){     //記錄指針后移
				db->classmates[i] = db->classmates[i - 1];
			}
			db->classmates[answer] = result;
			db->matesnum++;
		}
	}
	printf("是否繼續(xù)添加(是 1/否 0)?");
	while(true){
		scanf("%d", &answer);
		getchar();
		if(answer == 0 || answer == 1) break;
		printf("輸入錯誤!請重新輸入:");
	}
	if(answer) AddRecord(db);
}

/*
 *Function: AddToRecord
 *Usage: result = AddToRecord(n);
 *------------------------------------
 *這個函數(shù)在用戶要增加記錄時調(diào)用,添加一條記錄
 *用戶輸入完畢后,函數(shù)返回該記錄的指針
 */

oneRecord AddToRecord(int n)
{
	oneRecord emp;

	printf("請在一行中依次輸入\"姓名\"\"學號\"\"宿舍\"\"手機\"\"QQ號\"\"住址\"\n");
	printf("如該項信息空缺,請輸入“無”而不是以空格代替。每項信息中不能有空格,兩項信息之間以空格分隔。\n");
	emp = (oneRecord)GetBlock(sizeof *emp);
	emp->name = (char *)GetBlock(Namelength * sizeof(char));
	emp->number = (char *)GetBlock(Namelength * sizeof(char));
	emp->flatnum = (char *)GetBlock(Namelength * sizeof(char));
	emp->cellphone = (char *)GetBlock(Namelength * sizeof(char));
	emp->qqnum = (char *)GetBlock(Namelength * sizeof(char));
	emp->address = (char *)GetBlock(Namelength * sizeof(char));
	emp->n = n;
	scanf("%6s  %7s  %8s  %11s  %11s  %20s", emp->name, emp->number, emp->flatnum, emp->cellphone, emp->qqnum, emp->address);
	getchar();
	return (emp);
}

/*
 *Function: PrintRecord
 *Usage: PrintRecord(db);
 *------------------------------------
 *這個函數(shù)用于將記錄顯示在屏幕上
 *用戶可以根據(jù)需要選擇顯示部分或全部記錄
 *當用戶選擇顯示部分記錄時,若輸入的起始終止編號相同,則只顯示一條記錄
 */

void PrintRecord(FILE *infile, records db)
{
	int i = 0, start, end, answer;
	char *title;

	printf("目前菜單:顯示記錄。顯示部分請輸入0,顯示全部請輸入1,返回上一級菜單請輸入2:");
	while(true){
		scanf("%d", &answer);
		getchar();
		if(answer == 0 || answer == 1 || answer == 2) break;
		printf("輸入錯誤!請重新輸入:");
	}
	if(answer == 2) return;
	if(db->matesnum == 0){
		printf("文件中沒有記錄。\n");
		return;
	}
	if(!answer){      //用戶輸入0時,選擇顯示部分功能
	    printf("請輸入顯示范圍:\n");
		while(true){
			printf("請輸入起始標號:");
			scanf("%d", &start);
			getchar();
			printf("請輸入終止標號:");
			scanf("%d", &end);
			getchar();
			if(start <= end && end < db->matesnum) break;
			printf("指令錯誤!請重新輸入\n");
		}
		rewind(infile);    //文件指針復位
		title = (char *)malloc(100 * sizeof(char));
		fgets(title, 100, infile);
		printf("%s", title);     //顯示文件頭,如“姓名”等
		for(i = start; i <= end; i++){
			printf("%-4d.%-6s  %-7s  %-8s  %-11s  %-11s  %-20s\n", db->classmates[i]->n,db->classmates[i]->name,db->classmates[i]->number,db->classmates[i]->flatnum, db->classmates[i]->cellphone, db->classmates[i]->qqnum,db->classmates[i]->address);
		}
		printf("%d條記錄顯示完成。\n",end - start + 1);
	}else{
		rewind(infile);
		title = (char *)malloc(100 * sizeof(char));
		fgets(title, 100, infile);
		printf("%s", title);
		for(i = 0; i < db->matesnum; i++){
			printf("%-4d.%-6s  %-7s  %-8s  %-11s  %-11s  %-20s\n", db->classmates[i]->n,db->classmates[i]->name,db->classmates[i]->number,db->classmates[i]->flatnum, db->classmates[i]->cellphone, db->classmates[i]->qqnum,db->classmates[i]->address);
		}
		printf("%d條記錄顯示完成。\n", db->matesnum);
	}
}

/*
 *Function: GetBlock
 *Usage: temp = (char *)GetBlock(n * sizeof(char));
 *------------------------------------------------------
 *這個函數(shù)用于從堆中動態(tài)分配內(nèi)存
 */

void *GetBlock(size_t nbytes)
{
	void *result;

	result = malloc(nbytes);
	if(result == NULL){
		printf("申請內(nèi)存失敗!\n");
		system ("pause");
		exit (0);
	}
	return (result);
}

/*
 *Function: ScanRecord
 *Usage: ScanRecord(infile, db);
 *---------------------------------
 *這個函數(shù)將文件中的記錄信息掃描到程序
 *運行時聲明的數(shù)組中,便于快速更改
 *如果文件的格式有誤,函數(shù)會報錯并退出程序
 */

void ScanRecord(FILE *infile, records db)
{
	oneRecord temp;
	int i = 0, nscan;
	char termch;

	while(true){
		temp = (oneRecord)GetBlock(sizeof *temp);
		temp->name = (char *)GetBlock(Namelength * sizeof(char));
		temp->number = (char *)GetBlock(Namelength * sizeof(char));
		temp->flatnum = (char *)GetBlock(Namelength * sizeof(char));
		temp->cellphone = (char *)GetBlock(Namelength * sizeof(char));
		temp->qqnum = (char *)GetBlock(Namelength * sizeof(char));
		temp->address = (char *)GetBlock(Namelength * sizeof(char));
		nscan = fscanf(infile, "%d .%6s  %7s  %8s  %11s  %11s  %20s%c", &(temp->n), temp->name, temp->number, temp->flatnum, temp->cellphone, temp->qqnum, temp->address, &termch);
		if(nscan == EOF) break;
		if(temp->n < 0 || temp->n >= MaxElement){    //當記錄的編號超出范圍時
			printf("文件中記錄格式有誤,讀取失敗!\n");
			system ("pause");
			exit(1);
		}
		db->classmates[temp->n] = temp;
		i++;
	}
	db->matesnum = i;
}

/*
 *Function: UpdateRecord
 *Usage: UpdateRecord(string, infile, db);
 *-----------------------------------------
 *這個函數(shù)用于更新文件,即將修改后的記錄信息寫入到文件中
 *當這個函數(shù)在用戶選擇了保存記錄功能后被調(diào)用時,它會新建
 *一個臨時文件,然后把記錄寫入臨時文件中,最后以原文件名
 *將臨時文件重命名,并以之替換原文件
 */

void UpdateRecord(char *filename, FILE *infile, records db)
{
	int i;
	char *temname;
	FILE *outfile;

	temname = tmpnam(NULL);
	outfile = OPENFile(temname);
	fprintf(outfile, "%s\n", "     姓名:  學號:   宿舍:    手機:       QQ:         住址:   ");
	for(i = 0; i < db->matesnum; i++){
		fprintf(outfile, "%-4d.%-6s  %-7s  %-8s  %-11s  %-11s  %-20s\n", db->classmates[i]->n,db->classmates[i]->name,db->classmates[i]->number,db->classmates[i]->flatnum, db->classmates[i]->cellphone, db->classmates[i]->qqnum,db->classmates[i]->address);
		fflush(NULL);
	}
	fclose(infile);
	fclose(outfile);
	if(remove(filename) != 0 || rename(temname, filename) != 0){
		printf("無法重命名臨時文件!\n");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久蜜桃av一区精品变态类天堂 | 91麻豆精东视频| 欧美日韩一卡二卡三卡 | 91年精品国产| 日韩免费观看2025年上映的电影 | 精品久久人人做人人爰| 日韩欧美一二区| 亚洲蜜桃精久久久久久久| 蓝色福利精品导航| 欧美优质美女网站| 中文字幕第一区综合| 久久精品72免费观看| 在线免费观看日本欧美| 国产精品免费免费| 国产aⅴ综合色| 精品国产sm最大网站| 男女男精品视频网| 在线看日本不卡| 亚洲欧美在线视频观看| 国产mv日韩mv欧美| 亚洲国产成人午夜在线一区| 精品在线播放午夜| 欧美一区二区黄| 天堂午夜影视日韩欧美一区二区| 91网站视频在线观看| 久久精品日韩一区二区三区| 免费成人你懂的| 欧美一级在线观看| 蜜臀久久99精品久久久久宅男 | 亚洲精品国产品国语在线app| 国产成人精品亚洲午夜麻豆| 欧美videossexotv100| 美腿丝袜亚洲三区| 日韩精品一区二区三区视频播放 | 欧美午夜精品免费| 一区二区三区成人在线视频| 91女神在线视频| 一区二区三区精品久久久| 色婷婷av一区二区三区大白胸 | 91麻豆高清视频| 国产精品国产三级国产a| 成人黄色在线网站| 一区二区视频在线| 欧美喷水一区二区| 免费成人av资源网| 久久久久国产精品人| 成人黄页毛片网站| 亚洲综合丁香婷婷六月香| 欧美日韩一区中文字幕| 日韩av电影天堂| 久久综合国产精品| 99久久99久久精品免费观看| 亚洲男人的天堂av| 在线播放国产精品二区一二区四区| 日韩影院精彩在线| 久久精品无码一区二区三区| eeuss鲁片一区二区三区| 一区二区三区在线观看欧美| 欧美精品1区2区| 国产精品1区2区| 亚洲激情综合网| 日韩视频免费观看高清完整版在线观看 | 极品美女销魂一区二区三区| 国产日产精品一区| 欧美吻胸吃奶大尺度电影| 蜜乳av一区二区三区| 黄色小说综合网站| 中文字幕精品三区| 欧美高清视频www夜色资源网| 黄页视频在线91| 夜夜揉揉日日人人青青一国产精品 | 国产经典欧美精品| 亚洲综合一二区| 久久久久国产精品麻豆ai换脸| 91女人视频在线观看| 蜜桃一区二区三区在线观看| 国产精品久久久久国产精品日日 | 一本大道久久a久久综合| 日韩1区2区3区| 亚洲人成网站精品片在线观看| 欧美一区二区三区日韩| 成人白浆超碰人人人人| 免费观看一级特黄欧美大片| 亚洲精品成人少妇| 国产视频一区不卡| 欧美一区二区三区在线电影| 91麻豆国产精品久久| 国产乱码精品一区二区三| 天堂va蜜桃一区二区三区漫画版| 国产精品午夜春色av| 欧美成人一区二区三区在线观看 | 亚洲综合一区在线| 中文字幕av一区二区三区高| 日韩欧美一级在线播放| 欧美中文字幕久久| 99精品热视频| 精品国产一区二区亚洲人成毛片| 欧美亚洲高清一区| 91浏览器在线视频| 92国产精品观看| 国产精品99久久久久久有的能看 | 粉嫩高潮美女一区二区三区| 美国欧美日韩国产在线播放| 日日骚欧美日韩| 一区二区欧美视频| 亚洲男同性恋视频| 亚洲欧洲制服丝袜| 亚洲人成亚洲人成在线观看图片| 欧美激情一区二区三区蜜桃视频| 精品久久久三级丝袜| 欧美电影免费观看高清完整版在线| 欧美视频你懂的| 欧美日韩视频在线一区二区| 在线视频一区二区三| 在线观看91精品国产入口| 色猫猫国产区一区二在线视频| av一二三不卡影片| 91女神在线视频| 欧美在线播放高清精品| 欧美色综合网站| 67194成人在线观看| 欧美一区二区三区影视| 欧美不卡123| 亚洲精品一线二线三线| 国产欧美一区二区在线| 国产精品免费av| 亚洲欧美日韩国产综合| 亚洲已满18点击进入久久| 亚洲第一搞黄网站| 日本欧美加勒比视频| 久久99国产精品尤物| 国产成人精品影院| 99视频热这里只有精品免费| 91老司机福利 在线| 欧美欧美欧美欧美首页| 26uuu久久天堂性欧美| 国产欧美日韩亚州综合| 亚洲欧洲综合另类| 性欧美大战久久久久久久久| 精品一区二区三区久久久| 国产精品影视在线| 91福利在线播放| 8x8x8国产精品| 国产精品毛片高清在线完整版| 亚洲乱码精品一二三四区日韩在线 | 欧美日韩一区视频| 精品少妇一区二区三区免费观看 | 日韩视频免费观看高清在线视频| 久久精品夜色噜噜亚洲a∨| 国产精品国模大尺度视频| 五月激情综合网| 国产成a人亚洲| 欧美疯狂做受xxxx富婆| 国产欧美一区二区在线| 午夜精品成人在线| 成人毛片视频在线观看| 5566中文字幕一区二区电影| 日本一二三不卡| 男女男精品视频| 91伊人久久大香线蕉| 久久亚洲精品小早川怜子| 亚洲精品日韩专区silk | 天天综合色天天综合| 成人av在线一区二区| 7777精品伊人久久久大香线蕉完整版 | 97se狠狠狠综合亚洲狠狠| 欧美一区二区人人喊爽| 亚洲欧洲色图综合| 精品无人码麻豆乱码1区2区| 欧洲亚洲精品在线| 日本一区二区三区免费乱视频| 丝袜美腿亚洲综合| 91麻豆精品秘密| 日本一区二区三区高清不卡| 日韩电影免费在线看| 色婷婷激情综合| 国产精品国产三级国产有无不卡 | 国产麻豆精品视频| 91麻豆精品国产| 亚洲国产另类av| 91麻豆精品一区二区三区| 中文字幕第一页久久| 国产馆精品极品| 欧美变态凌虐bdsm| 日本vs亚洲vs韩国一区三区二区| 在线观看国产日韩| 亚洲激情第一区| 91香蕉视频mp4| 1000精品久久久久久久久| 成人网在线免费视频| 在线视频一区二区三| 亚洲欧洲制服丝袜| 99re这里都是精品| 国产综合色在线视频区| 欧美一三区三区四区免费在线看| 亚洲最大成人综合| 欧洲亚洲精品在线| 亚洲国产精品久久一线不卡| 色老综合老女人久久久| 亚洲欧美经典视频|