본문 바로가기
프로그래밍 자료/C

[C언어] 학생 이름, 평균 랜덤출력 프로그램

by 두잇is두잇 2022. 5. 17.
728x90
반응형
728x170

 

MySQL 수업을 위해 임의의 데이터가 필요했는데 마땅한 데이터셋이 없어서 C언어를 사용해서 간단하게 데이터를 랜덤하게 만드는 프로그램 코드를 짜봤다.

이름도 너무 많이 하면 귀찮아서 몇명 이름으로 돌려막아 만들음...

 

 

전처리 정의를 통해 학생수, 이름에 들어갈 글자수를 수정할 수 있고 단일변수만 가지고 처리하려다가 자꾸 오류나서 그냥 구조체로 다시 수정해서 만들었다.

 

 

 

 

MySQL Workbench에서는 외부 데이터셋(CSV, JSON 파일)을 테이블 데이터로 Import할 수 있어서 파일은 txt가 아닌 csv 파일로 저장한다.

 

 

 

 

코드를 실행하면 이렇게 300명(수정 가능)의 데이터가 출력되게 하고

 

디버깅때문에 일부 변수값을 보이게 설정해놈

 

student.csv 파일을 실행하면 정상적으로 행, 열 값이 들어가있는 것을 확인할 수 있다.

 

728x90

 

 

 

메모장으로 확인해보면 데이터값이 쉼표(,)로 구분되어 있는 것을 확인할 수 있다.

csv 파일은 쉼표(,)로 데이터값을 구분하기 때문에 이렇게 넣어주면 된다.

 

 

 

발로 짜긴 했지만 코드도 같이 올림..

 

 

student.cpp
0.00MB

 

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define STU_CNT 300 //학생 수 
#define FIRST_NAME 41 //first_word * 2 + 1
#define LAST_NAME 71  //last_word * 2 + 1 

//학생 정보 구조체 
typedef struct STU {
	char sname[10];
	char smajor[14];
	int grade;
	int classnum; 
	double avg;
} STU;

int main() {
	STU stu[STU_CNT]; //학생 구조체 선언 
	int i, j, major, t_first, t_last;
	char first[FIRST_NAME] = "김이박최정조한신임지유송강양원전서황주성"; //20개 
	char last[LAST_NAME] = "민경도현찬기덕아건영재지호주성보용조빈예원우서준선미애대은동정신유오하"; //35개 
	char sname[10] = "", word[3] = "";
	
	FILE *fp = fopen("student.csv", "wt");
	if(fp == NULL) return 1;
	
	srand(time(NULL));
	
	fprintf(fp, "sid,sname,major,grade,classnum,avg\n");
	
	for(i = 0; i < STU_CNT; i++) {
		//char 배열 초기화 
		strcpy(stu[i].sname, "");
		strcpy(stu[i].smajor, "");
		
		printf("i %d name %s ", i+1, stu[i].sname);
		
		//성 
		t_first = rand() % (FIRST_NAME - 2);
		if((t_first <= (FIRST_NAME - 3)) && (t_first % 2 == 1)) t_first++;
		strncpy(word, &first[t_first], 2);
		strcat(stu[i].sname, word);
		printf("t_f %d f %s ", t_first, stu[i].sname);
		
		//이름(2자)
		for(j = 0; j <= 1; j++) {
			t_last = rand() % (LAST_NAME - 2);
			if((t_last <= (LAST_NAME - 3)) && (t_last % 2 == 1)) t_last++;
			strncat(stu[i].sname, &last[t_last], 2);
		}
		printf("l %s /", stu[i].sname);
		
		//학과
		major = rand() % 4;
		if(major == 0) strcpy(stu[i].smajor, "경영회계과");
		else if(major == 1) strcpy(stu[i].smajor, "보건간호과");
		else if(major == 2) strcpy(stu[i].smajor, "빅데이터과");
		else strcpy(stu[i].smajor, "소프트웨어과");
		
		//학년반, 학점	
		stu[i].grade = rand() % 3 + 1; //학년 
		stu[i].classnum = rand() % 10 + 1;  //반 
		stu[i].avg = (double)rand() / RAND_MAX * 100;	 //학점(0~100, 실수) 
		printf("%f \n", stu[i].avg);
		
		//파일에 한줄 출력
		fprintf(fp, "%d,%s,%s,%d,%d,%.2f\n", i+1, stu[i].sname, stu[i].smajor, stu[i].grade, stu[i].classnum, stu[i].avg);
	}
	
	fclose(fp);
	return 0;
	
}

 

 

* 코드는 출처만 밝혀주시면 자유롭게 사용하셔도 됩니다.

728x90
반응형
그리드형

댓글