文档章节

学生信息管理系统

a
 a2843885
发布于 2015/05/01 14:56
字数 2219
阅读 98
收藏 0
#include <stdio.h>
#include <string.h>
#include <stdlib.h>       //include the prototype of exit()
#include <stdbool.h>

#define NUMLEN 11
#define NAMLEN 20    // name length
#define PHOLEN 12    // max length of phone number
#define MAILEN 20    // mail length
   // The following  constants used in struct ADDRESS
#define PROLEN 10     // province length
#define CITLEN 25      // city length
#define COULEN 25      // county length
#define VILLEN 20      // village length

int count = 0 ;         // actual number of people
int choice = 0 ;         // user's choice used in the menu

struct BIRTHDAY    // struct birthday
{
	int year ;
	int month ;
	int day ;
} ;

struct ADDRESS         // struct address
{
	char province[PROLEN] ;       // store province  address
	char city[CITLEN] ;           // store city address
	char county[COULEN] ;           // store county address
	char village[VILLEN] ;        // store village address
} ;

struct STUDENT           // struct student
{
	char name[NAMLEN] ;    // store name
	char num[NUMLEN] ;       // store school number
	int age ;
	char sex ;   
	struct BIRTHDAY bir ;
	struct ADDRESS addr ;
	char phonum[PHOLEN] ;      //store phone number
	char mail[MAILEN] ;        // store e-mail address
} ;

struct STUDENT stu[100] ;      // the number of student

void Add(void) ;
void Get_bir(void) ;  // used in Add() to get birthday
bool check(struct BIRTHDAY bir) ;      // used in Cet_bir() to check bir's validity
bool leap_year(int year) ;             // used in check() to confirm whether it is a leap year

void Get_addr(void) ;             // used in Add() to get address
void Get_phonum(void) ;           // used in Add() to get phone number
void Get_mail(void) ;             // used in Add() to get e-mail address
/////////////////////////////////////////////////////////////////
void search_name(void) ;       // search by name
void search_num(void) ;        // search by number (school number)
void Display(int i) ;         // display the information of someone
void Search(void) ;
/////////////////////////////////////////////////////////////////
void Modify(void) ;         // used to modify student's information
void change(int i) ;        // used in Modify() 
bool yes_or_no(void) ;      // used in change()
void change_name(void) ;     // change information used in search by name
void change_num(void) ;     // change information used in search by number
bool confirm(void) ;        // to acquire the user's confirm
void Name(int i) ;          // modify name, the following all used in change()
void Num(int i) ;           // ...
void Age(int i) ;           // ...
void Sex(int i) ;           // ...
void Bir(int i) ;           // ...
void Addr(int i) ;          // ...
void Phonum(int i) ;        // ...
void Mail(int i) ;          // ...
/////////////////////////////////////////////////////////////////
void Delete(void) ;           // delete information
void delete_name(void) ;       // delete by name
void delete_num(void) ;         // delete by number
void del(int i) ;
////////////////////////////////////////////////////////////////
void Sort(void) ;             
////////////////////////////////////////////////////////////////
void Menu(void) ;
int get_ch() ;              // get user's directive
void Show(void) ;

int main(void)
{
	Show() ;
	Menu() ;
	while (1)
	{
		choice = get_ch() ;
		switch (choice)
		{
		case 1:
			Add() ;
			break ;

		case 2:
			Delete() ;
			break ;

		case 3:
			Modify() ;
			break ;
			
		case 4:
			Search() ;
			break ;

		case 5:
			for (int n = 0; n < count; ++ n)
				Display(n) ;
			break ;

		case 6:
			Sort() ;
			break ;

		case 7:
			Menu() ;
			break ;

		case 0:
			exit(0) ;

		default:
			printf("Incorrect indirective!\n") ;
		}
	}
	return 0 ;
}

void Add(void)
{
	printf("Enter your name: ") ;
	scanf("%s",stu[count].name) ;
	getchar() ;

	printf("Enter your school number: ") ;
	while(!(scanf("%s",stu[count].num) && strlen(stu[count].num) == NUMLEN - 1))
		printf("Enter your school number(ten digits),try again: ") ;
	getchar() ;

	printf("Enter your age: ") ;
	while(!(scanf("%d",&stu[count].age) && stu[count].age >= 15 && stu[count].age <= 30))
		printf("Age ranges from 15 to 30, try again: ") ;
	getchar() ;

	printf("Enter your sex: ") ;
	while(!(scanf("%c",&stu[count].sex) && (stu[count].sex == 'm' || stu[count].sex == 'f')))
		printf("The sex is %c?\n",stu[count].sex) ;
	getchar() ;

	Get_bir() ;      // get birthday
	getchar() ;

	Get_addr() ;                   // get address

	Get_phonum() ;                 // get phone number

	Get_mail() ;
	count ++ ;
	printf("Done!\n") ;
}

void Get_bir(void)
{
   printf("Enter your birthday like this: 2015 6 24\n") ;
   printf("Enter your birthday: ") ;
   while(!(scanf("%d%d%d", &stu[count].bir.year, &stu[count].bir.month, &stu[count].bir.day) && check(stu[count].bir)))
        printf("Wrong !! Try again: ") ;
}

bool check (struct BIRTHDAY bir)
{
	if (2 == bir.month)
		if(leap_year(bir.year))
			if(bir.day <= 29) 
				return true ;
			else
				{
					printf("%d year %d month has %d days?\n",bir.year,bir.month,bir.day) ;
					printf(" 2 month has no more than 29 days even the year is a leap year!!\n") ;
					return false ;
			}
		else if (bir.day <= 28)
			return true ;
		else
			{
				printf("%d year is not a leap year, so 2 month shouldn't have more than 28 days\n",bir.year) ;
				return false ;
		}
	else if(bir.day > 31)
		{
			printf("Have you ever seen a month that has %d days?\n", bir.day) ;
			return false ;
	}
		if(31 == bir.day)
		if((bir.month < 8 && bir.month%2 == 1) || (bir.month >= 8 && bir.month % 2 == 0))
			return true ;
		else
			{
				printf("%d month is not a solar month,so it shouldn't have more than 30 days.\n",bir.month) ;
				return false ;
		}
	else 
		return true ;
}

bool leap_year(int year)
{
	return ((0 == year%4 && year% 100 != 0) || (0 == year%400)) ? true : false ;
}

void Get_addr(void)
{
	printf("Enter your province: ") ;
	while(!scanf("%s",stu[count].addr.province))
	      printf("Something went wrong!! Try again: ") ;
	getchar() ;

        printf("Enter your city: ") ;
	while(!scanf("%s",stu[count].addr.city))
	      printf("Something went wrong!! Try again: ") ;
	getchar() ;
	
	printf("Enter your county: ") ;
	while(!scanf("%s",stu[count].addr.county)) 
	      printf("Something went wrong!! Try again: ") ;
	getchar() ;

	printf("Enter your village: ") ;
	while(!scanf("%s",stu[count].addr.village))
	      printf("Something went wrong!! Try again: ") ;
	getchar() ;
}

void Get_phonum(void)
{
	printf("Enter phone number: ") ;
	while(!(scanf("%s",stu[count].phonum) && (strlen(stu[count].phonum) == PHOLEN - 1 || strlen(stu[count].phonum) == PHOLEN - 5)))
	      printf("Wrong!! Try again: ") ;
	getchar() ;
}

void Get_mail(void)
{
	printf("Enter e-mail address: ") ;
	while(!scanf("%s",stu[count].mail))
	      printf("Wrong!! Try again: ") ;
	getchar() ;
}

void Search(void)
{
	if(!count) 
		printf("No person!! Please add first.\n") ;
	else
	{
		int choice_12 = 0 ;
		printf("Search by name, input 1(one); by number, input 2\n") ;
		printf("Enter your choice: ") ;
		while(!(scanf("%d",&choice_12) && (1 == choice_12 || 2 == choice_12)))
			printf("Enter 1 or 2, Try again: ") ;
		switch(choice_12)
		{
		case 1:
			search_name() ;
			break ;
		case 2:
			search_num() ;
			break ;
		}
	}
}

void search_name(void)
{
	char temp[NAMLEN] ;
	printf("Enter the name: ") ;
	while(scanf("%s",temp))
	{
		int flag = 0 ;
		for (int i = 0; i < count; ++ i)
			if (0 == strcmp(temp,(stu+i)->name))
			{
				Display(i) ;
				flag = 1 ;
				break ;
			}
			if (!flag)
			{
				printf("No such student!!\n") ;
				printf("Enter the name carefully: ") ;
				continue ;
			}
		if (flag)
			break ;
	}
}

void search_num(void)
{
	char temp[NUMLEN] ;
	printf("Enter the number: ") ;
	while(scanf("%s",temp))
	{
		int flag = 0 ;
		for (int i = 0; i < count; ++ i)
			if (0 == strcmp(temp,(stu+i)->num))
			{
				Display(i) ;
				flag = 1 ;
				break ;
			}
			if (!flag)
			{
				printf("No such person!!\n") ;
				printf("Enter the number carefully: ") ;
				continue ;
			}
		if (flag)
			break ;
	}
}

void Display(int i)
{
	printf("name \tnumber\tage sex\n") ;
	printf("%s  \t%s\t%d %c\n",stu[i].name,stu[i].num,stu[i].age,stu[i].sex) ;
	printf("birthday: %d %d %d\n",stu[i].bir.year,stu[i].bir.month,stu[i].bir.day) ;
	printf("address: %s %s %s %s\n",stu[i].addr.province,stu[i].addr.city,stu[i].addr.county,stu[i].addr.village) ;
	printf("phone number: %s\te-mail address: %s\n",stu[i].phonum,stu[i].mail) ;
} 
///////////////////////////////////////////////////////////
void Modify(void)
{
	if (!count)
		printf("No person!! please add first.\n") ;
	else
	{
		int choice_12 = 0 ;
		printf("Search by name, input 1; by number, input 2\n") ;
		printf("Enter your choice now: ") ;
		while (!(scanf("%d",&choice_12) && (1 == choice_12 || 2 == choice_12)))
			printf("Enter 1 or 2.  Try again: ") ;
		switch (choice_12)
		{
		case 1:
			change_name() ;
			break ;
		case 2:
			change_num() ;
			break ;
		}
	}
}

void change(int i)
{
	printf("1) name     \t2) number \t3) age   \t4) sex\n") ;
	printf("5) birthfay \t6) address\t7) phonum\t8) e-mail\n") ;
	int choice_18 = 0 ;
	bool FLAG = true ;

	while(FLAG)
	{
		printf("Enter the corresponding option: ") ;
		while(!(scanf("%d",&choice_18) && choice_18 < 9 && choice_18 > 0))
			printf("Enter 1 or 2 or ... or 8. Try again: ") ;
		switch (choice_18)
		{
		case 1:
			Name(i) ;
			FLAG = yes_or_no() ;
			break ;

		case 2:
			Num(i) ;
			FLAG = yes_or_no() ;
			break ;

		case 3:
			Age(i) ;
			FLAG = yes_or_no() ;
			break ;

		case 4:
			Sex(i) ;
			FLAG = yes_or_no() ;
			break ;

		case 5:
			Bir(i) ;
			FLAG = yes_or_no() ;
			break ;

		case 6:
			Addr(i) ;
			FLAG = yes_or_no() ;
			break ;

		case 7:
			Phonum(i) ;
			FLAG = yes_or_no() ; 
			break ;
			
		case 8:
			Mail(i) ;
			FLAG = yes_or_no() ;
			break ;
		}
	}
}

bool yes_or_no(void)
{
	getchar() ;
	char flag = '0' ;
	printf("Continue ?(y\\n): ") ;
	while(!(scanf("%c",&flag) && ('y' == flag || 'Y' == flag || 'n' == flag || 'N' == flag)))
		printf("Enter 'y'('Y') or 'n'('N').  Try again: ") ;
	if ('y' == flag || 'Y' == flag)
		return true ;
	else
		return false ;
}

void change_name(void)
{
	char temp[NAMLEN] ;
	printf("Enter the name: ") ;
	while(scanf("%s",temp))
	{
		int flag = 0 ;
		for (int i = 0; i < count; ++ i)
			if (0 == strcmp(temp,(stu+i)->name))
			{
				change(i) ;
				flag = 1 ;
				break ;
			}
		if (!flag)
		{
			printf("No such student!!\n") ;
			printf("Enter the name carefully: ") ;
			continue ;
		}
		else
			break ;
	}
}

void change_num(void)
{
	char temp[NUMLEN] ;
	printf("Enter the number: ") ;
	while (scanf("%s",temp))
	{
		int flag = 0 ;
		for (int i = 0; i < count; ++ i)
			if (0 == strcmp(temp,(stu+i)->num))
			{
				change(i) ;
				flag = 1 ;
				break ;
			}
		if (!flag)
		{
			printf("No such person!!\n") ;
			printf("Enter the number carefully: ") ;
			continue ;
		}
		else
		    break ;
	}
}

void Name(int i)
{
	char temp_name[NAMLEN] ;
	while(!scanf("%s",temp_name))
		printf("Enter carefully!  Try again: ") ;
	getchar() ;
	if (confirm())
	{
		strcpy(stu[i].name,temp_name) ;
		printf("Update successfully!\n") ;
	}
	else 
		printf("Information remains unchanged!\n") ;
}

void Num(int i)
{
	char temp_num[NUMLEN] ;
	while(!(scanf("%s",temp_num) && 10 == strlen(temp_num)))
		printf("Enter carefully!  Try again: ") ;
	getchar() ;
	if (confirm())
	{
		strcpy(stu[i].num,temp_num) ;
		printf("Update successfully!\n") ;
	}
	else
		printf("Information remains unchanged!\n") ;
}

void Age(int i)
{
	int temp_age = 0 ;
	while(!(scanf("%d",&temp_age) && temp_age < 31 && temp_age > 14))
		printf("Age ranges from 15 to 30.  Try again: ") ;
	getchar() ;
	if(confirm())
	{
		stu[i].age = temp_age ;
		printf("Update successfully!\n") ;
	}
	else
		printf("Information remains unchanged!\n") ;
}

void Sex(int i)
{
	char temp_sex = '0' ;
	while(!(scanf("%c",&temp_sex) && ('m' == temp_sex || 'f' == temp_sex)))
		printf("Enter 'm' or 'f'.  Try again: ") ;
	getchar() ;
	if(confirm())
	{
		stu[i].sex = temp_sex ;
		printf("Update successfully!\n") ;
	}
	else
		printf("Information remains unchanged!\n") ;
}

void Bir(int i)
{
	struct BIRTHDAY temp_bir ;
	printf("Enter the birthday like this: 2048 8 15\n") ;
	printf("Enter the birthday now: ") ;
	while(!(scanf("%d %d %d", &temp_bir.year, &temp_bir.month, &temp_bir.day) && check(temp_bir)))
		printf("Enter carefully.  Try again: ") ;
	getchar() ;
	if(confirm())
	{
		// the below three statements can be substituted with     stu[i].bir = temp_bir
		stu[i].bir.year = temp_bir.year ;         
		stu[i].bir.month = temp_bir.month ;
		stu[i].bir.day = temp_bir.day ;

		printf("Update successfully!\n") ;
	}
	else
		printf("Information remains unchanged!\n") ;
}

void Addr(int i)
{
	struct ADDRESS temp_addr ;
	printf("Enter the address like this: henan zhengzhou hongxing zhaozhuang\n") ;
	printf("Enter the new address now: ") ;
	while(!scanf("%s %s %s %s",temp_addr.province, temp_addr.city, temp_addr.county, temp_addr.village))
		printf("Enter carefully.  Try again: ") ;
	getchar() ;
	if(confirm())
	{
		// the below four statements can be substituted with     stu[i].addr = temp_addr 
		strcpy(stu[i].addr.province,temp_addr.province) ;
		strcpy(stu[i].addr.city,temp_addr.city) ;
		strcpy(stu[i].addr.county,temp_addr.county) ;
		strcpy(stu[i].addr.village,temp_addr.village) ;

		printf("Update successfully!\n") ;
	}
	else
		printf("Information remains unchanged!\n") ;
}

void Phonum(int i)
{
	char temp_phonum[PHOLEN] ;
	printf("Enter the new phone number now: ") ;
	while(!(scanf("%s",temp_phonum) && (7 == strlen(temp_phonum) || 11 == strlen(temp_phonum))))
		printf("Enter carefully.  Try again: ") ;
	getchar() ;
	if(confirm())
	{
		strcpy(stu[i].phonum,temp_phonum) ;
		printf("Update successfully!\n") ;
	}
	else
		printf("Information remains unchanged!\n") ;
}

void Mail(int i)
{
	char temp_mail[MAILEN] ;
	printf("Enter the new e-mail address: ") ;
	while(!scanf("%s",temp_mail))
		printf("Enter carefully.  Try again: ") ;
	getchar() ;
	if(confirm())
	{
		strcpy(stu[i].mail,temp_mail) ;
		printf("Update successfully!\n") ;
	}
	else
		printf("Information remains unchanged.\n") ;
}

bool confirm(void)
{
	char flags = '0' ;
	printf("Do you really want to change that ?(y\\n): ") ;
	while (!(scanf("%c",&flags) && ('y' == flags || 'Y' == flags || 'n' == flags || 'N' == flags)))
		printf("Enter 'y'('Y') or 'n'('N').  Try again: ") ;
	if ('y' == flags || 'Y' == flags)
		return true ;
	else
		return false ;
}
//////////////////////////////////////////////
void Delete(void)
{
	if (!count)
		printf("No person!! Please add first.\n") ;
	else
	{
		int choice_12 = 0 ;
		printf("Search by name, input 1; by name, input 2\n") ;
		printf("Enter your choice now: ") ;
		while(!(scanf("%d",&choice_12) && (1 == choice_12 || 2 == choice_12)))
			printf("Enter 1 or 2.  Try again: ") ;
		switch (choice_12)
		{
		case 1:
			delete_name() ;
			break ;

		case 2:
			delete_num() ;
			break ;

		}
	}
}

void del(int i)
{
	if (confirm())
	{
		for (int j = i; j < count; ++ j)
			stu[j] = stu[j+1] ;
		-- count ;                     // important
		printf("Delete successfully!\n") ;
	}
	else
		printf("Information remains unchanged!\n") ;
}

void delete_name(void)
{
	char temp[NAMLEN] ;
	printf("Enter the name: ") ;
	while(scanf("%s",temp))
	{
		int flag = 0 ;
		for (int i = 0; i < count; ++ i)
			if (0 == strcmp(temp,(stu+i)->name))
			{
				del(i) ;
				flag = 1 ;
				break ;
			}
			if (!flag)
			{
				printf("No such student!!\n") ;
				printf("Enter the name carefully: ") ;
				continue ;
			}
			else
				break ;
	}
}
		
void delete_num(void)
{
	char temp[NUMLEN] ;
	printf("Enter the number: ") ;
	while (scanf("%s",temp))
	{
		int flag = 0 ;
		for (int i = 0; i < count; ++ i)
			if (0 == strcmp(temp,(stu+i)->num))
			{
				del(i) ;
				flag = 1 ;
				break ;
			}
			if (!flag)
			{
				printf("No such person!!\n") ;
				printf("Enter the number carefully: ") ;
				continue ;
			}
			else
				break ;
	}
}
//////////////////////////////////////////////
void Sort(void)
{
	if(!count)
		printf("No person!! please add first.\n") ;
	else
	{
		struct STUDENT temp_stu ;
		for (int i = 0; i < count; ++ i)
			for (int j = i; j < count; ++ j)
				if (strcmp(stu[i].num,stu[j].num) >= 0)
				{
					temp_stu = stu[i] ;
					stu[i] = stu[j] ;
					stu[j] = temp_stu ;
				}
		printf("Sort successfully.\n") ;
	}
}

void Menu(void)
{
	printf("\t\t   1) Add       2) Delete     3) Modify   4) Search\n") ;
	printf("\t\t   5) Output    6) Sort       7) Menu     0) Exit\n") ;
}

int get_ch()
{
	int choi=0 ;
	printf("Enter your choice: ") ;
	while (!(scanf("%d",&choi) != EOF && choi >= 0 && choi < 8))
		printf("Enter integers from 0 to 7.  Try again: ") ;
	return choi ;
}

void Show(void)
{
	printf("\t\t\t|||||||||||||||||||||||||||||||||\n") ;
	printf("\t\t\t||                             ||\n") ;
	printf("\t\t\t||    WELCOME TO COME HERE     ||\n") ;
	printf("\t\t\t||                             ||\n") ;
	printf("\t\t\t|||||||||||||||||||||||||||||||||\n\n") ;
}

gcc -o stucode stucode.c -Wall -std=c99

本文转载自:

a
粉丝 0
博文 1
码字总数 0
作品 0
长沙
私信 提问
QTP数据库检查和WEB表格数据检查

  使用 QTP 测试 数据输入是否成功。   在本例中使用三个办法:1、检查页面显示的记录条数;2、根据关键字检查 数据库 中数据;3、检查页面显示的最后一行数据是否为新增的数据。   二...

不折腾难受斯基
2015/07/23
19
0
学生信息管理系统--EduCloud

学生信息管理系统 (SIMS) 是一种应用软件教育机构来管理学生的数据。学生信息系统提供的能力进入学生表现的信息,建立学生的时间表,跟踪学生的出勤率,以及其他许多学生管理有关的数据,适合...

匿名
2009/04/03
11.4K
0
C#项目 学生选课系统 C#窗口 Winform项目 项目源码及使用说明

这是一个学生选课信息管理系统,使用VS2010+SQL2008编写,VS2017正常使用。 项目源码下载地址 https://gitee.com/whuanle/xkgl 学生选课管理系统 项目介绍 这是一个学生选课信息管理系统,使...

痴者工良
2018/11/16
0
0
浪潮承建国内学籍系统 两亿人一生一号

由浪潮承建的全国中小学生学籍信息管理系统预计于今年秋季学期实现全国联网并试运行,该系统将为每名中小学学生建立全国唯一的、跟随一生的学籍编号,作为国内教育大数据的典型案例,这一系统...

oschina
2013/05/22
7K
65
c/c++ xml库,要支持xpath和xquery,可以良好的支持中文

想用C/C++写一个信息管理系统,目前只考虑linux系统上的实现,例如一个通讯录管理或者学生信息管理 不想用数据库,C/C++有没有什么可以支持xpath和xquery的库,libxml2和timyxml2哪个要好一点...

小代码2016
2015/09/20
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

为什么要在网站中应用CDN加速?

1. 网页加载速度更快 在网站中使用CDN技术最直接的一个好处就是它可以加快网页的加载速度。首先,CDN加速的内容分发是基于服务器缓存的,由于CDN中缓存了不少数据,它能够给用户提供更快的页...

云漫网络Ruan
23分钟前
2
0
亚玛芬体育(Amer Sports)和信必优正式启动合作开发Movesense创新

亚玛芬体育和信必优正式启动合作开发Movesense创新,作为亚玛芬体育的完美技术搭档,信必优利用Movesense传感器技术为第三方开发移动应用和服务。 Movesense基于传感器技术和开放的API,测量...

symbiochina88
34分钟前
2
0
创龙TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA核心板规格书

SOM-TL437xF是一款广州创龙基于TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA芯片设计的核心板,采用沉金无铅工艺的10层板设计,适用于高速数据采集和处理系统、汽车导航、工业自动化等领...

Tronlong创龙
35分钟前
2
0
好程序员Java学习路线分享MyBatis之线程优化

  好程序员Java学习路线分享MyBatis之线程优化,我们的项目存在大量用户同时访问的情况,那么就会出现大量线程并发访问数据库,这样会带来线程同步问题,本章我们将讨论MyBatis的线程同步问...

好程序员官方
41分钟前
6
0
IDEA 自定义方法注解模板

IDEA 自定义方法注解模板 1、使用效果 /*** 计算交易费用* @Author wangjiafang* @Date 2019/9/11* @param feeComputeVo* @return*/@PostMapping("/v1/fee_compute")public ApiResp......

小白的成长
41分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部