#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语言学生信息管理系统项目源码的更多相关文章

  1. springboot+mybatis+bootstrap开发员工oa后台管理系统项目源码

    java项目源码详情描述:S020<springboot+mybatis+bootstrap开发员工oa后台管理系统项目源码>jboa项目有请假以及报销单的申请和审核session共享加登 ...

  2. 大型三甲HIS系统最新C#源码医院信息管理系统NET源码门诊住院医嘱药房药库发药管理源码

    查看医疗信息管理his系统演示 本云his系统源码,适用在县乡一体化,医联体分级诊疗项目上,本源码开发语言asp.net c#,数据库sqlserver2012,开发工具vs2015.技术框架mvc. ...

  3. c语言学生信息管理系统-学习结构体

    #include<stdio.h> #include<stdlib.h> //结构体可以存放的学生信息最大个数,不可变变量 ; //学生信息结构体数组,最多可以存放100个学生 ...

  4. 基于S2SH开发学生考勤管理系统 附源码

    开发环境: Windows操作系统开发工具:Eclipse+Jdk+Tomcat+mysql数据库 运行效果图 源码及原文链接:http://javadao.xyz/forum.php?mod=vie ...

  5. 放出一批学生管理系统jsp源码,部分有框架

    基于jsp+struts 2的学生管理系统eclipse - 源码码头   https://www.icodedock.com/article/25.html 基于jsp+mysql的JSP学生成绩管 ...

  6. SSH项目,JSP项目,SSM项目源码附带环境安装指导视频教程

    基于java开发的一个局域网端口扫描程序下载地址:https://www.icodedock.com/article/6.html 用JAVA实现对JAVA代码的格式化下载地址:https://www ...

  7. 项目源码--Android天气日历精致UI源码

    下载源码 技术要点: 1. 天气日历精致UI 2. Android的Http通信技术 3. Android的天气信息解析 4. Android的日历信息的统计 5. Andorid的地理位置的管理 6 ...

  8. 学生信息管理系统应用ios源码iPad版

    学生信息管理系统应用iPad版,该应用源码比较完整的,而且也很详细,这也是一款学校用的学生和老师管理系统,里面涉及到了很多ipad常用的控件,操作和数据存储. <ignore_js_op> ...

  9. C#项目 学生选课系统 C#窗口 Winform项目 项目源码及使用说明

    这是一个学生选课信息管理系统,使用VS2010+SQL2008编写,VS2017正常使用. 项目源码下载地址 https://gitee.com/whuanle/xkgl 笔者录了两个视频,打开项目源 ...

随机推荐

  1. 二、nginx搭建图片服务器

    接上篇:Nginx安装手册 cd /usr/local/nginx/conf/ 配置图片服务器 方法一.在配置文件server{}中location /{} 修改配置: #默认请求 location ...

  2. chrome开发工具指南(五)

    Main Menu Click More  to open the Main Menu. Settings To open Settings, do one of the following: Pre ...

  3. 使用XmlWriter创建XML文件

    using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Xml ...

  4. js 实现 input type="file" 文件上传示例代码

    在开发中,文件上传必不可少但是它长得又丑.浏览的字样不能换,一般会让其隐藏点其他的标签(图片等)来时实现选择文件上传功能 在开发中,文件上传必不可少,<input type="file ...

  5. 201521123084 《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. answer: (1)netassist可以用来链接IP端口 (2)accept方法可以用来监听端口,当没 ...

  6. Matlab生成.exe可执行程序

    由于在教学过程中需要演示Matlab程序,而教学机又未安装Matlab程序,因此有必要将Matlab程序生成.exe可执行程序,便于直接执行. 在Matlab中提供了Complier,可直接使用. ( ...

  7. 201521123086《java程序设计》第四周

    本章学习总结 尝试使用思维导图总结有关继承的知识点 1.2 使用常规方法总结其他上课内容. 为了不必要写重复的代码,可以运用继承,用关键字extends来定义一个类,被继承的类叫做父类,继承的类叫做子 ...

  8. 201521123076 《Java程序设计》 第十四周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...

  9. 201521123063 《Java程序设计》 第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前 ...

  10. linux目录结构图