学生信息管理系统
来源:互联网 发布:型钢重量计算软件 编辑:程序博客网 时间:2024/04/27 18:51
/*
系统相当的不完善
1 输入两个相同的学号以后 查询时只能显示第二次输入的学号 修改时也只能修改第
二次输入的学号
只有删除了第2次输入的学号才能对第一次输入的学号做相应的操作;这是一个
BUG!
2 在电脑中新建一个文本文档来存储输入的数据,实现记忆的功能 回到英汉词典的
问题
3 排序方法的实现
4 用户登录时 退格键的使用有问题 如果直接退格 视为登录密码错误
modify by 2010-5-12 16:30 zhengchengpeng
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define MAX 20
typedef struct student //学生
{
char sNo[MAX]; // 学号
char sName[MAX]; //姓名
char sex[MAX]; //性别
char age[MAX]; //年龄
char depart[MAX]; //系
char classs[MAX]; //班
//char grade[MAX]; //年级
struct student *next;
} student;
student *head; //结构体头指针
int LogOn() //登录模块,已实现输入密码不回显,如果中途发现输错某几位,可
退格键重输
{
int i=0;
char username[MAX];
char password[MAX];
printf("/n请输入用户名:");
scanf("%s",username);
printf("/n请输入密码(最多15位):");
//开始以不回显且支持退格方式获取输入密码
while((i>=0) && (password[i++] = getch()) != 13)//条件i>=0是用于限
制退格的范围
{
if(password[i-1] == '/b')//对退格键的处理
{
printf("%c%c%c",'/b','/0','/b');
i = i-2;
}
else
printf("*");
}
password[--i]='/0';
//已获取密码。验证用户身份
if(!strcmp(username,"zhengchengpeng")&& !(strcmp
(password,"870219")))
{
printf("/n登录成功!");
return 1;
}
else
return 0;
}
void regist()
{
char ch;
student *s; //s用来建新的结点
student *ptr; //ptr用来暂存头结点
do
{
s = (student*)malloc(sizeof(student)); // 新建一个学生结点
printf("/n开始注册.../n"); //开始注册
printf("/n请输入该学生的学号:");
scanf("%s",s->sNo);
printf("/n请输入该学生的姓名:");
scanf("%s",s->sName);
printf("/n请输入该学生的性别:");
scanf("%s",s->sex);
printf("/n请输入该学生的年龄:");
scanf("%s",s->age);
printf("/n请输入该学生的系:");
scanf("%s",s->depart);
printf("/n请输入该学生所在的班:");
scanf("%s",s->classs);
//printf("/n请输入该学生所在的年级");
//scanf("%s",s->grade);
ptr = head;
head = s;//将新结点插入队头
s->next = ptr;
fflush(stdin);
printf("/n请问是否继续注册?(Y/N)");
scanf("%c",&ch);
}while(ch=='Y'||ch=='y');
}
void ElePrint(char str[]) //输出单个元素
{
if(str==NULL)
{
exit(0);
}
printf("%s",str);
for(unsigned int i=0;i<12-strlen(str);i++)
{
printf(" ");//为了对齐输出,需插入一些空格
}
return;
}
int LinePrint(student *ptr) //输出一行
{
if(ptr==NULL) //检查传进来的指针
return 0;
printf("/n");
ElePrint(ptr->sNo);
ElePrint(ptr->sName);
ElePrint(ptr->age);
ElePrint(ptr->sex);
ElePrint(ptr->depart);
ElePrint(ptr->classs);
//ElePrint(ptr->grade);
return 1;
}
void print() //输出全部学生信息
{
student *ptr = head;
printf("/n学号 姓名 年龄 性别 系 班 ");
while(ptr)
{
LinePrint(ptr);
ptr=ptr->next;
}
printf("/n");
return;
}
void search()//查询模块
{
int method;//查询方式
char no[MAX];
char name[MAX];
char departm[MAX];
char clss[MAX];
//char grades[MAX]; //用来接收查询关键字
while(1)
{
printf("/n请选择查询方式");
printf("/n1.按学号查询");
printf("/n2.按姓名查询");
printf("/n3.按所在系查询");
printf("/n4.按所在班级查询");
//printf("/n5.按所在年级查询");
printf("/n5.打印全部学生信息");
printf("/n6.返回主菜单/n");
scanf("%d",&method);
student *p=head;
student *temp;
switch(method)
{
case 1:
printf("/n请输入要查询的学号:");
scanf("%s",no);
while(p)
{
if(!strcmp(p-
>sNo,no))
break;
else
{
temp=p;
p=p-
>next;
}
}
printf("/n学号 姓名
年龄 性别 系 班 年级 ");
LinePrint(p);
break;
case 2:
printf("/n请输入要查询的姓名:");
scanf("%s",name);
printf("/n学号 姓名 年龄
性别 系 班 年级 ");
while(p)
{
if(!strcmp(p-
>sName,name))
LinePrint(p);
p=p->next;
}
break;
case 3:
printf("/n请输入学生所在的系:");
scanf("%s",departm);
printf("/n学号 姓名 年龄
性别 系 班 年级 ");
while(p)
{
if(!strcmp(p-
>depart,departm))
LinePrint(p);
p=p->next;
}
break;
case 4:
printf("/n请输入学生所在的班:");
scanf("%s",clss);
// printf("/n请输入学生所在的年
级:");
// scanf("%s",grades);
printf("/n学号 姓名 年龄
性别 系 班 年级 ");
while(p)
{
if(!strcmp(p-
>classs,clss))//&&!strcmp(p->grade,grades))
LinePrint(p);
p=p->next;
}
break;
/*case 5:
printf("/n请输入学生所在的年级:");
scanf("%s",grades);
printf("/n学号 姓名 年龄
性别 系 班 年级 ");
while(p)
{
if(!strcmp(p-
>grade,grades))
LinePrint(p);
p=p->next;
}
break; */
case 5:
print();
break;
case 6:
return;
default:
printf("很抱歉,暂无此查询方式!");
break;
}
}
}
void modify()//修改学生信息
{
char num[MAX];
student *p=head;
printf("/n请输入要修改的学生的学号:");
scanf("%s",num);
while(p)
{
if(!strcmp(p->sNo,num))
break;
else
p = p->next;
}
if(p == NULL)
{
printf("/n错误:没有此学生的信息!/n");
return;
}
LinePrint(p);
printf("/n请输入要修改的该学生的信息:");
printf("/n1.姓名");
printf("/n2.性别");
printf("/n3.年龄");
printf("/n4.所在的系");
printf("/n5.所在的班");
// printf("/n6.所在的年级");
char name1[MAX];
char sex1[MAX];
char age1[MAX];
char depart1[MAX];
char class1[MAX];
// char grade1[MAX];
int select;
fflush(stdin);
scanf("%d",&select);
printf("/n请输入新的信息:");
switch(select)
{
case 1:
scanf("%s",name1);
strcpy(p->sName,name1);
break;
case 2:
scanf("%s",sex1);
strcpy(p->sex,sex1);
break;
case 3:
scanf("%s",age1);
strcpy(p->age,age1);
break;
case 4:
scanf("%s",depart1);
strcpy(p->depart,depart1);
break;
case 5:
scanf("%s",class1);
strcpy(p->classs,class1);
break;
/*case 6:
scanf("%s",grade1);
strcpy(p->grade,grade1);
break; */
default:
printf("/nError!");
break;
}
LinePrint(p);
return;
}
void delete_()// 删除某学生的信息
{
student *p = head;
student *temp = head;
student *s;
char num1[MAX];
char ch;
printf("/n请输入要删除的学生的学号:");
scanf("%s",num1);
while(p)//查找该学生所在的结点
{
if(!strcmp(p->sNo,num1))
break;
else
{
temp = p;
p=p->next;
}
}//while
if(!p)
{
printf("/n不存在此学生的信息!");
return;
}
LinePrint(p);//输出该学生的信息
printf("/n请问真的要删除该学生的信息吗?(Y/N)");
fflush(stdin);
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
{
s=p->next;
temp->next=s;
free(p);
printf("/n已经删除该学生的信息.");
}
return;
}
void sort() //排序模块。将学生记录按学号从小到大排列。用起泡排序算法实现
{
student *ptr,*s=head,*p;
int count=0,count1;
while(s)//统计链表结点个数
{
count++;
s=s->next;
}
for(int i=1;i<count;i++)
{
ptr=head;
p=NULL;
count1=count-i; //用来控制每轮起泡排序的终点,即每次把
学号最小的结点移到倒数第i个结点
while(ptr&&ptr->next&&(count1--))
{
if(strcmp(ptr->sNo,ptr->next->sNo)>0)
{
s=ptr->next;
ptr->next=s->next;
if(p==NULL) //ptr处于队头时
head=s;
else
p->next=s;
s->next=ptr;
p=s;
}
else
{
ptr=ptr->next;
if(p==NULL) //ptr处于队头时
p=head;
else
p=p->next;
}
}
}
return;
}
void quit()
{
char ch;
printf("/n确定退出?(Y/N)");
fflush(stdin);
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
{
exit(0);
}
return;
}
int main()
{
int option;
printf("/r/n/t/tCopyright@2010 zhengchengpeng All rights
reserved./n");
printf("/r/n/t/t/t欢迎使用学生信息管理系统!/r/n");
//登录模块
int icheck=0;
while(icheck<3)
{
if(LogOn()==0)
icheck++;
else
break;
}
if(icheck==3)
{
printf("/n连续登录三次不成功,退出!");
exit(0);
}
//系统界面
while(1)
{
printf("/n/n请选择需要的服务:");
printf("/n1.学生注册");
printf("/n2.学生查询");
printf("/n3.信息修改");
printf("/n4.删除信息");
printf("/n5.学号排序");
printf("/n6.程序退出/n");
scanf("%d",&option);
switch(option)
{
case 1:
regist();break;
case 2:
search(); break;
case 3:
modify(); break;
case 4:
delete_(); break;
case 5:
sort(); break;
case 6:
quit(); break;
}
}
return 0;
}
- 学生信息管理系统
- 学生学籍信息管理系统
- 学生信息管理系统
- 学生信息管理系统
- 学生成绩信息管理系统
- 学生信息管理系统
- 【学生信息管理系统 总结】
- 学生信息管理系统--毕业论文
- 学生信息管理系统
- 学生信息管理系统
- 学生信息管理系统~~~~~
- 学生信息管理系统
- 学生信息管理系统总结
- 学生信息管理系统
- 学生信息管理系统
- 学生信息管理系统
- netbeans 学生信息管理系统
- 学生信息管理系统
- 原子函数
- 在命令行中使用exp/imp工具实现oracle数据导出/导入
- 生活小记。不动声色
- 【转载】UML的价值
- PDO入门
- 学生信息管理系统
- 让内层将外层撑开
- 浅谈HashTable
- RUBY实践—Ruby Report之Ruport简单应用
- 查询EI检索号的方法
- 我们都只是螃蟹
- 2005年上半年软件评测师试题和答案
- CommandBehavior.CloseConnection的使用
- C# Using的三种用法