C语言学生信息管理系统项目源码
#include
//包含printf()、scanf()、gets()、puts()、getchar()函数
#include //包含malloc()函数
#include
//包含strcmp()、strlen()、sizeof()、strcpy()函数
#include //包含system()、sleep()函数
#include //包含exit()函数
#define arrSize 256
#define sleepTime 50
void countBackwards()
{
for (int i=3; i>=0; )
{
//\r表示光标重新到达行首
printf("\r离程序退出还有%d秒",
i--);
Sleep(sleepTime);
}
//函数声明
void exitPrograms();
exitPrograms();
}
void fullScreen()
{
HWND hwnd=GetForegroundWindow();
int x=GetSystemMetrics(SM_CXSCREEN)+300,
y=GetSystemMetrics(SM_CYSCREEN)+300;
char setting[30];
//设置控制台行列数
sprintf(setting, "mode con:cols=%d lines=%d", x,
y);
system(setting);
//置顶
SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, x+200,
y+200, NULL);
//移动
MoveWindow(hwnd, -5, -20, x+200, y+200,
1);
printf("\n\n");
}
void wait()
{
for (int i=0; i < 24; i++)
{
Sleep(sleepTime);printf(".");
}
puts("\n");
}
void hello()
{
for (int i=0; i < 5; i++)
{
Sleep(sleepTime);printf("X");
}
Sleep(sleepTime);printf(" ");
Sleep(sleepTime);printf("欢");
Sleep(sleepTime);printf("迎");
Sleep(sleepTime);printf("来");
Sleep(sleepTime);printf("到");
Sleep(sleepTime);printf("学");
Sleep(sleepTime);printf("生");
Sleep(sleepTime);printf("信");
Sleep(sleepTime);printf("息");
Sleep(sleepTime);printf("管");
Sleep(sleepTime);printf("理");
Sleep(sleepTime);printf("系");
Sleep(sleepTime);printf("统");
Sleep(sleepTime);printf(" ");
for (int k=0; k < 5; k++)
{
Sleep(sleepTime);printf("X");
}
puts("\n");
}
void checkUsernamePassword()
{
char username[] = "xinke",
username0[arrSize];
char password[] = "2016",
password0[arrSize];
for(int i=1; i<4; i++)
{
printf("请输入用户名:");
gets(username0);
if (strcmp(username, username0)
!= 0)
{
puts("用户名错误!");
printf("3次输入错误将退出程序,错误%d次!\n\n",
i);
if (i ==
3)
{
printf("程序即将退出");
wait();
system("cls");
//调用倒计时函数
countBackwards();
}
}
else
{
i=3;
puts("用户名正确!\n");
for (int a=1;
a<4; a++)
{
printf("请输入密码:");
gets(password0);
if
(strcmp(password, password0) != 0)
{
puts("密码错误!");
printf("3次输入错误将退出程序,错误%d次!\n\n",
a);
if
(a == 3)
{
puts("程序即将退出");
wait();
system("cls");
//调用倒计时函数f
countBackwards();
break;
}
}
else
{
a=3;
printf("密码正确,即将进入程序");
wait();
system("cls");
}
}
}
}
}
void menu()
{
puts("::::::请输入您要选择的操作编码::::::");
puts("1. 添加新学生的信息");
puts("2. 根据学号查找学生信息功能");
puts("3. 根据姓名查找学生信息功能");
puts("4. 根据学号修改学生信息功能");
puts("5. 根据学号删除学生信息功能");
puts("6. 根据姓名删除学生信息功能");
puts("7. 输入0退出");
puts("::::::::::::::::::::::::::::::::::::");
}
struct student
{
int
num; //6位数字且唯一,不能添加相同学号的学生,添加的学生信息要永久保存
char
name[arrSize]; //可以重复
char
birthday[arrSize]; //出生年月格式为1990-08-23
char
sex[arrSize]; //性别
char
adress[arrSize]; //家庭地址
char
phone[arrSize]; //联系方式为11位电话号码或是0710-9999999的格式
struct student
*next;
};
static struct student *head = NULL;
struct student *createStudent(int num, char name[arrSize], char
birthday[arrSize], char sex[arrSize], char adress[arrSize], char
phone[arrSize], struct student *next)
{
struct student *tmp;
tmp = (struct student*)malloc(sizeof(struct
student));
tmp->num = num;
strcpy(tmp->name, name);
strcpy(tmp->birthday, birthday);
strcpy(tmp->sex, sex);
strcpy(tmp->adress, adress);
strcpy(tmp->phone, phone);
tmp->next = next;
return tmp;
}
void addStudent(int num, char name[arrSize], char
birthday[arrSize], char sex[arrSize], char adress[arrSize], char
phone[arrSize])
{
struct student *tmp = head->next;
struct student *tmp1 = head;
struct student *newnode = createStudent(num,
name, birthday, sex, adress, phone, NULL);
while (tmp != NULL)
{
if (tmp->num >=
num)
{
newnode->next
= tmp;
tmp1->next
= newnode;
break;
}
tmp1 = tmp1->next;
tmp = tmp->next;
}
if (tmp == NULL)
{
tmp1->next = newnode;
}
}
void findStudentFromNum(int num)
{
struct student *tmp = head->next;
int flag1;
while (tmp != NULL)
{
if (tmp->num == num)
{
flag1 =
1;
system("cls");
puts("恭喜您!找到了该学生,信息如下:\n学号\t姓名\t出生日期\t性别\t家庭地址\t联系方式");
printf("%d\t%s\t%s\t%s\t%s\t\t%s\n\n",
tmp->num, tmp->name, tmp->birthday, tmp->sex,
tmp->adress, tmp->phone);
break;
}
tmp = tmp->next;
}
if (flag1 != 1)
{
puts("系统中不存在该学生的信息!");
}
}
void findStudentFromName(char name[arrSize])
{
struct student *tmp = head->next;
int flag2;
while (tmp != NULL)
{
if (strcmp(tmp->name, name)
== 0)
{
flag2 =
1;
system("cls");
puts("恭喜您!找到了该学生,信息如下:\n学号\t姓名\t出生日期\t性别\t家庭地址\t联系方式");
printf("%d\t%s\t%s\t%s\t%s\t\t%s\n\n",
tmp->num, tmp->name, tmp->birthday, tmp->sex,
tmp->adress, tmp->phone);
break;
}
tmp = tmp->next;
}
if (flag2 != 1)
{
puts("系统中不存在该学生的信息!");
}
}
void modifyStudentFromNum(int num, char name[arrSize], char
birthday[arrSize], char sex[arrSize], char adress[arrSize], char
phone[arrSize])
{
struct student *tmp = head->next;
while (tmp != NULL)
{
if (tmp->num == num)
{
strcpy(tmp->name,
name);
strcpy(tmp->birthday,
birthday);
strcpy(tmp->sex,
sex);
strcpy(tmp->adress,
adress);
strcpy(tmp->phone,
phone);
break;
}
tmp = tmp->next;
}
}
void deleteStudentFromNum(int num)
{
struct student *tmp = head->next;
struct student *tmp1 = head;
while (tmp != NULL)
{
if (tmp->num == num)
{
tmp1->next
= tmp->next;
free(tmp);
break;
}
tmp = tmp->next;
tmp1 = tmp1->next;
}
}
void deleteStudentFromName(char name[arrSize])
{
struct student *tmp = head->next;
struct student *tmp1 = head;
while (tmp != NULL)
{
if (strcmp(tmp->name, name)
== 0)
{
tmp1->next
= tmp->next;
free(tmp);
break;
}
tmp = tmp->next;
tmp1 = tmp1->next;
}
}
void printList()
{
struct student *tmp;
tmp = head->next;
puts("学号\t姓名\t出生日期\t性别\t家庭地址\t联系方式");
while (tmp)
{
printf("%d\t%s\t%s\t%s\t%s\t\t%s\n",
tmp->num, tmp->name, tmp->birthday, tmp->sex,
tmp->adress, tmp->phone);
tmp = tmp->next;
}
}
void freeList()
{
struct student *tmp = head;
struct student *tmp1;
while (tmp)
{
tmp1 = tmp;
tmp = tmp->next;
free(tmp1);
}
}
void exitPrograms()
{
system("cls");
printf("请输入0退出程序:");
exit(getch());
}
int x;
int checkNumStrlen()
{
while(1)
{
char num[arrSize];
printf("请输入要添加的学生学号:");
scanf("%s", num);
if (strlen(num) ==
6)
{
x =
atoi(num);
//函数声明
int
checkNumNoSame();
checkNumNoSame();
return
x;
}
else
{
puts("学号必须为6位数!\n");
}
}
}
int
checkNumNoSame()
{
struct student *tmp = head->next;
while(1)
{
if (tmp == NULL)
{
return
x;
}
if (tmp->num == x)
{
printf("已存在该学号,请重新输入!\n\n");
checkNumStrlen();
break;
}
tmp=tmp->next;
}
}
int main(void)
{
fullScreen(); //调用全屏函数
system("color
0C"); //背景为黑色,前景为淡红色
checkUsernamePassword(); //验证用户名和密码
printf("系统正在初始化,请稍候");
wait(); //稍候效果......
system("cls");
system("color 0A");
for (int i=50000; i>=0; i--)
{
printf("%d", rand());
Sleep(0.000001);
}
system("cls");
hello(); //动态显示欢迎信息
system("color
0A"); //背景为黑色,前景为淡绿色
menu(); //打印菜单栏
struct student *stu1;
struct student *stu2;
struct student *stu3;
struct student *stu4;
struct student *tmp;
stu1 = createStudent(201601, "Alan",
"1997-09-15", "女", "墨西哥", "13871745572", NULL);
stu2 = createStudent(201602, "Bobo",
"1994-08-25", "男", "亚马逊", "0710-1452637", NULL);
stu3 = createStudent(201603, "John",
"1996-02-23", "男", "莫斯科", "13476320757", NULL);
stu4 = createStudent(201604, "Cici",
"1995-11-12", "女", "太平洋", "0710-4567894", NULL);
head = (struct student*)malloc(sizeof(struct
student));
head->num = -1;
head->next = NULL;
head->next = stu1;
stu1->next = stu2;
stu2->next = stu3;
stu3->next = stu4;
stu4->next = NULL;
FILE *fp;
struct student tmps;
struct student *tmp_head;
fp = fopen("student.txt", "rt");
if (fp == NULL)
{
perror("fopen");
return -1;
}
tmp_head = head;
memset(&tmps, 0, sizeof(struct
student));
while (fread(&tmps, sizeof(struct student),
1, fp) > 0)
{
tmp_head->next =
createStudent(tmps.num, tmps.name, tmps.birthday, tmps.sex,
tmps.adress, tmps.phone, NULL);
tmp_head =
tmp_head->next;
memset(&tmps, 0,
sizeof(struct student));
}
fclose(fp);
int num;
char temp[arrSize] =
{0}; //用于以字符串形式接收的学号成员转换为int类型的中间变量
char name[arrSize]={0}, birthday[arrSize]={0},
sex[arrSize]={0}, adress[arrSize]={0}, phone[arrSize]={0};
int choice = 0;
while(1)
{
ret:
printf("\n请选择1-7:");
fflush(stdin);
scanf("%d", &choice);
fflush(stdin);
switch(choice)
{
case 1:
puts("请分别输入要添加的学生的信息");
num=checkNumStrlen();
printf("请输入要添加的学生姓名:");
fflush(stdin);
scanf("%s",
name);
ret1: //用于跳转语句1
printf("请输入要添加的学生出生日期:");
scanf("%s",
birthday);
if
((birthday[4] != '-') || (birthday[7] != '-'))
{
puts("您输入的出生日期格式有误,请按照:1990-09-20的格式输入!\n");
goto
ret1;
}
ret2: //用于跳转语句2
while
(1)
{
printf("请输入要添加的学生性别:");
scanf("%s",
sex);
if
((strcmp(sex, "男") == 0) || (strcmp(sex, "女") == 0))
{
break;
}
else
{
puts("您输入的性别格式有误,请输入男或女!\n");
goto
ret2;
}
}
printf("请输入要添加的学生家庭地址:");
scanf("%s",
adress);
ret3: //用于跳转语句3
while
(1)
{
printf("请输入要添加的学生联系方式:");
scanf("%s",
phone);
if
((strlen(phone) == 11) || ((strlen(phone) == 12) &&
(phone[4] == '-')))
{
break;
}
else
{
puts("您输入的联系方式格式有误,请按照:11位数字或者0710-9999999的格式输入!\n");
goto
ret3;
}
}
system("cls");
printf("系统正在添加学生信息,请稍候");wait();
addStudent(num,
name, birthday, sex, adress, phone);
Sleep(100);
puts("\n恭喜您!信息添加成功!\n");
printList();
puts("\n");
menu();
break;
case 2:
printf("请输入要查找的学生学号:");
scanf("%d",
&num);
system("cls");
printf("系统正在查找学生信息,请稍候");wait();
findStudentFromNum(num);
printf("\n");
printList();
puts("\n");
menu();
break;
case
3:
printf("请输入要查找的学生姓名:");
scanf("%s",
name);
system("cls");
printf("系统正在查找学生信息,请稍候");wait();
findStudentFromName(name);
printf("\n");
printList();
puts("\n");
menu();
break;
case
4:
printf("请输入要修改的学生学号:");
scanf("%d",
&num);
printf("请输入要修改的学生姓名:");
scanf("%s",
name);
printf("请输入要修改的学生出生日期:");
scanf("%s",
birthday);
printf("请输入要修改的学生性别:");
scanf("%s",
sex);
printf("请输入要修改的学生家庭地址:");
scanf("%s",
adress);
printf("请输入要修改的学生联系方式:");
scanf("%s",
phone);
system("cls");
printf("系统正在修改学生信息,请稍候");
wait();
modifyStudentFromNum(num,
name, birthday, sex, adress, phone);
Sleep(100);
puts("\n恭喜您!信息修改成功!\n");
printList();
puts("\n");
menu();
break;
case
5:
printf("请输入要删除的学生学号:");
scanf("%d",
&num);
puts("\n");
system("cls");
printf("系统正在删除学生信息,请稍候");
wait();
deleteStudentFromNum(num);
Sleep(100);
puts("\n恭喜您!信息删除成功!\n");
printList();
puts("\n");
menu();
break;
case 6:
printf("请输入要删除的学生姓名:");
scanf("%s",
name);
system("cls");
printf("系统正在删除学生信息,请稍候");
wait();
deleteStudentFromName(name);
Sleep(100);
puts("\n恭喜您!信息删除成功!\n");
printList();
puts("\n");
menu();
break;
case 7:
fp
= fopen("student.txt", "wt");
if
(fp == NULL)
{
perror("fopen");
return
-1;
}
tmp_head
= head->next;
while
(tmp_head)
{
fwrite(tmp_head,
sizeof(struct student), 1, fp);
tmp_head
= tmp_head->next;
}
fclose(fp);
exitPrograms();
break;
default:
puts("您输入的操作编号不在本系统服务区范围,请输入数字1-7!");
goto
ret;
break;
}
}
freeList();
return 0;
}
C语言学生信息管理系统项目源码的更多相关文章
- springboot+mybatis+bootstrap开发员工oa后台管理系统项目源码
java项目源码详情描述:S020<springboot+mybatis+bootstrap开发员工oa后台管理系统项目源码>jboa项目有请假以及报销单的申请和审核session共享加登 ...
- 大型三甲HIS系统最新C#源码医院信息管理系统NET源码门诊住院医嘱药房药库发药管理源码
查看医疗信息管理his系统演示 本云his系统源码,适用在县乡一体化,医联体分级诊疗项目上,本源码开发语言asp.net c#,数据库sqlserver2012,开发工具vs2015.技术框架mvc. ...
- c语言学生信息管理系统-学习结构体
#include<stdio.h> #include<stdlib.h> //结构体可以存放的学生信息最大个数,不可变变量 ; //学生信息结构体数组,最多可以存放100个学生 ...
- 基于S2SH开发学生考勤管理系统 附源码
开发环境: Windows操作系统开发工具:Eclipse+Jdk+Tomcat+mysql数据库 运行效果图 源码及原文链接:http://javadao.xyz/forum.php?mod=vie ...
- 放出一批学生管理系统jsp源码,部分有框架
基于jsp+struts 2的学生管理系统eclipse - 源码码头 https://www.icodedock.com/article/25.html 基于jsp+mysql的JSP学生成绩管 ...
- SSH项目,JSP项目,SSM项目源码附带环境安装指导视频教程
基于java开发的一个局域网端口扫描程序下载地址:https://www.icodedock.com/article/6.html 用JAVA实现对JAVA代码的格式化下载地址:https://www ...
- 项目源码--Android天气日历精致UI源码
下载源码 技术要点: 1. 天气日历精致UI 2. Android的Http通信技术 3. Android的天气信息解析 4. Android的日历信息的统计 5. Andorid的地理位置的管理 6 ...
- 学生信息管理系统应用ios源码iPad版
学生信息管理系统应用iPad版,该应用源码比较完整的,而且也很详细,这也是一款学校用的学生和老师管理系统,里面涉及到了很多ipad常用的控件,操作和数据存储. <ignore_js_op> ...
- C#项目 学生选课系统 C#窗口 Winform项目 项目源码及使用说明
这是一个学生选课信息管理系统,使用VS2010+SQL2008编写,VS2017正常使用. 项目源码下载地址 https://gitee.com/whuanle/xkgl 笔者录了两个视频,打开项目源 ...
随机推荐
- mysql varchar和char的根本区别深度详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt337 VARCHAR 和 CHAR 是两种最主要的字符串类型 .不幸的是,很 ...
- js script放在head和body里面的区别
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp66 java script放在head和body的区别 ...
- Android学习记录:Paint,Canvas和Bitmap
在Java中,利用过双缓冲技术,先将画笔画在内存上,再转化为图片,调出来. 当画的东西过多造成处理不过来时,双缓冲技术将防止闪屏. 在Paint方法下,我们这样写: BufferedImage tmp ...
- NPOI创建EXCEL(NOPI系列1)
private void button1_Click(object sender, EventArgs e) { //创建一个工作薄 HSSFWorkbook wk = new HSSFWorkboo ...
- 设计模式-单体模式(C++)
设计模式-单体模式 单体模式在使用非常方便,适合于单一的对象,例如全局对象的抽象使用. 需要注意的是单体模式不可继承 // 实现 Singleton.h #ifndef __SINGLETON_H__ ...
- Mybatis源码解析-BoundSql
mybatis作为持久层,其操作数据库离不开sql语句.而BoundSql则是其保存Sql语句的对象 前提 针对mybatis的配置文件的节点解析,比如where/if/trim的节点解析可见文章Sp ...
- (Alpha)个人总结
(Alpha)个人总结 一. 总结自己的alpha 过程 1.团队的整体情况 alpha阶段,整个团队很团结状态很好.在计划制定出来后,大家都服从安排,将该完成的工作都一一完成.虽然在课堂演示的时候又 ...
- Beta的计划和人员的变动
一.新的成员和组长是否重选: 刘光华:先加入的一个帅哥,乐于助人,编码基础不是很好,但是有一颗热爱学习的心,会积极主动的完成自己的任务的,一句话宣言:我们的团队是最棒的! 程志铭:做事认真负责,工作脚 ...
- 201521123010 《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 ①List中指定元素的删除(题目4-1) 1.1 实验总结 A: 这道题是老 ...
- 201521044091 《java程序设计》第八周学习总结
本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容.1.2 选做:收集你认为有用的代码片段 书面作业 本次作业题集集合 List中指定元素的删除(题目4-1)1.1 实验 ...