设计一个学生信息管理系统
#include #include #include #define MAX 1000 struct stu { char id[8]char name[8]double Chinesedouble Mathdouble Englishdouble averagedouble total} struct stu students[MAX] int currentvoid input() { int iprintf("请输入学生人数:")scanf("%d", &current)for (i = 0i <currenti++) { printf("\n请输入学生学号,最多为7位数: ")scanf("%s", students[i].id)printf("请输入学生姓名:")scanf("%s", students[i].name)printf("请输入语文成绩:")scanf("%lf", &students[i].Chinese)printf("请输入数学成绩:")scanf("%lf", &students[i].Math)printf("请输入英语成绩:")scanf("%lf", &students[i].English)students[i].total = students[i].Chinese + students[i].Math + students[i].Englishstudents[i].average = students[i].total / 3} } void sort(struct stu array[], int n) { int i, jstruct stu tempfor (i = 0i <ni++) { for (j = i+1j <nj++) { if (array[i].average - array[j].average <1e-16) { temp = array[i]array[i] = array[j]array[j] = temp} } } } void print_score(struct stu array[], int n) { int idouble ave = 0int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0for (i = 0i <ni++) { ave += array[i].averageswitch ((int)(array[i].average / 10)) { case 10: case 9: sum1++breakcase 8: sum2++breakcase 7: case 6: sum3++breakdefault: sum4++} } printf("全班的平均分为:%.1f\n", ave/n)printf("平均分在90分以上的人数为:%d\n", sum1)printf("平均分在80~89的人数为:%d\n", sum2)printf("平均分在60~79的人数为:%d\n", sum3)printf("平均分在60分以下的人数为:%d\n", sum4)} void print_unreach(struct stu array[], int n) { int iprintf("科目\t学号\t名字\n")for (i = 0i <ni++) { if (array[i].Chinese <60) { printf("语文\t%s\t%s\n", array[i].id, array[i].name)} if (array[i].Math <60) { printf("数学\t%s\t%s\n", array[i].id, array[i].name)} if (array[i].English 60) { printf("英语\t%s\t%s\n", array[i].id, array[i].name)} } } void print_good(struct stu array[], int n) { int ichar mark = 0if (n >3) { n = 3} printf("学号\t姓名\t语文\t数学\t英语\t平均分\t名次\n")for (i = 0i ni++) { if ((array[i].Chinese >60) &&(array[i].Math >60) &&(array[i].English >60)) { if (array[i].average >90) mark = 1else if (array[i].average >85) { if (array[i].Chinese == 100) mark = 1if (array[i].Math == 100) mark = 1if (array[i].English == 100) mark = 1if (array[i].Chinese >95 &&array[i].English >95) mark = 1if (array[i].Chinese >95 &&array[i].Math >95) mark = 1if (array[i].Math >95 &&array[i].English >95) mark = 1} if (mark == 1) { printf("%s\t%s\t", array[i].id, array[i].name)printf("%.f\t%.f\t%.f\t%.1f\t", array[i].Chinese, array[i].Math, array[i].English, array[i].average)printf("%d\n", i+1)} } } } void search_name(struct stu array[], int n, char* name) { int ichar mark = 1for (i = 0i <ni++) { if (strcmp(name, array[i].name) == 0) { printf("学生姓名:%s\n", name)printf("学生学号:%s\n", array[i].id)printf("语文:%.f\n", array[i].Chinese)printf("数学:%.f\n", array[i].Math)printf("英语:%.f\n", array[i].English)printf("平均分:%.1f\n", array[i].average)mark = 0} } if (mark == 1) puts("不存在该学生记录")} void search_id(struct stu array[], int n, char* id) { int ichar mark = 1for (i = 0i <ni++) { if (strcmp(id, array[i].id) == 0) { printf("学生姓名:%s\n", array[i].name)printf("学生学号:%s\n", array[i].id)printf("语文:%.f\n", array[i].Chinese)printf("数学:%.f\n", array[i].Math)printf("英语:%.f\n", array[i].English)printf("平均分:%.1f\n", array[i].average)mark = 0break} } if (mark == 1) puts("不存在该学生记录")} void print_menu() { system("cls")printf("1.输入学生信息\n")puts("2.统计全班学生成绩")puts("3.按学号查询学生成绩")puts("4.按姓名查询学生成绩")puts("5.输出不及格情况")puts("6.输出优等生名单")puts("0.退出本程序")printf("\n\n 请输入你的选择:")} int main(int argc, char **argv) { char ch = 0char id[8], name[8]while (ch != '0') { print_menu()ch = getchar()switch (ch) { case '1': { system("cls")input()sort(students, current)break} case '2': { system("cls")print_score(students, current)break} case '3': { system("cls")printf("请输入学号:")scanf("%s", id)search_id(students, current, id)break} case '4': { system("cls")printf("请输入姓名:")scanf("%s", name)search_name(students, current, name)break} case '5': { system("cls")print_unreach(students, current)break} case '6': { system("cls")print_good(students, current)break} case '0': exit(0)} printf("\n\n按任意键返回主菜单……")getchar()getchar()} return 0}
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
char name[20]
long int num
char sex[4]
int age
char address[30]
double tele_num
char aihao[20]
struct student *next
}//定义一个结构题
int TOTAL_NUM = 0//学生总数
struct student *head = NULL
void welcome ()//欢迎界面
void mainmenu ()//主界面
void record ()//记录数据
void insert(struct student *stu)//插入数据
void display(struct student *stu)//显示一个学生的信息
void displayAll ()//显示所有学生的信息
void query_by_num ()//按学号查询学生信息
void readData ()//读取文件里学生的信息
void writeData ()//向文件写入学生信息
void freeAll ()//清空链表内容
void del ()//删除学生信息
void change ()//更改学生信息
void devise (struct student *p)//选择更改内容
int main (void)
{
welcome ()
//显示主菜单
mainmenu ()
return 0
}
//显示欢迎信息
void welcome ()
{
printf ("+----------------------------------------------------+\n")
printf ("||\n")
printf ("| 欢迎使用网络工程学院信息安全092班学生信息管理系统 |\n")
printf ("||\n")
printf ("+----------------------------------------------------+\n")
}
//系统主菜单
void mainmenu ()
{
int choice
choice = -1
readData ()
printf ("\n温馨提示:为保证您的操作得到保存,请按正常顺序退出系统^_^\n")
do
{
printf ("\n\n\n")
printf ("\t\t\t--------------------------------------------\n")
printf ("\t\t\t+信息安全092班学生信息管理系统 |\n")
printf ("\t\t\t--------------------------------------------\n")
printf ("\t\t\t+[1]----录入学生信息|\n")
printf ("\t\t\t+[2]----浏览学生信息|\n")
printf ("\t\t\t+[3]----查询学生信息|\n")
printf ("\t\t\t+[4]----删除学生信息|\n")
printf ("\t\t\t+[5]----修改学生信息|\n")
printf ("\t\t\t+[0]----退出系统|\n")
printf ("\t\t\t+*·*·*·*·*·*·*·*·*·*·*·*·*·*·*|\n")
printf ("\t\t\t--------------------------------------------\n")
printf ("请输入您的选择:")
scanf ("%d", &choice)
switch (choice)
{
case 0:
writeData ()
freeAll ()
exit (0)
case 1:
record ()
break
case 2:
displayAll ()
break
case 3:
query_by_num ()
break
case 4:
del ()
break
case 5:
change ()
break
default:
printf ("\n无效选项!")
break
}
}
while (choice != 0)
}
//录入学生信息
void record ()
{
struct student *p0
p0 = (struct student *)malloc(LEN)
printf ("请输入学生的姓名:")
scanf ("%s",p0->name)
printf ("请输入学生的学号:")
scanf ("%ld",&p0->num)
printf ("请输入学生的性别:")
scanf ("%s",p0->sex)
printf ("请输入学生的年龄:")
scanf ("%d",&p0->age)
printf ("请输入学生的地址:")
scanf ("%s",p0->address)
printf ("请输入学生的电话:")
scanf ("%lf",&p0->tele_num)
printf ("请输入学生的爱好:")
scanf ("%s",p0->aihao)
insert (p0)
printf ("该学生的信息为:\n")
printf ("-------------------------------------------------------------------------------\n")
printf ("姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n")
display (p0)
}
void insert (struct student *stu)
{
struct student *p0, *p1, *p2
p1 = head
p0 = stu
if (head == NULL)
{
head = p0
p0->next = NULL
}
else
{
while ((p0->num >p1->num)&&(p1->next != NULL))
{
p2 = p1
p1 = p1->next
}
if (p0->num <= p1->num)
{
if (head == p1)
head = p0
else
p2->next = p0
p0->next = p1
}
else
{
p1->next = p0
p0->next = NULL
}
}
TOTAL_NUM++
}
void display (struct student *p)
{
printf ("%s\t%ld\t%d\t%s\t%s\t\t%.0f\t%s\n", p->name, p->num, p->age, p->sex, p->address, p->tele_num, p->aihao)
}
//浏览学生信息
void displayAll()
{
struct student *p
printf("学生总数:%d\n", TOTAL_NUM)
p = head
if (head != NULL)
{
printf("\n姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n")
printf("-------------------------------------------------------------------------------\n")
do
{
display(p)
p = p->next
}
while(p != NULL)
}
printf ("\n")
}
//按学号查询学生信息
void query_by_num ()
{
int num
struct student *p1
printf("请输入学生的学号:")
scanf("%ld", &num)
if(head==NULL)
{
printf("无学生记录!\n")
return
}
p1 = head
while (num!=p1->num &&p1->next!=NULL)
p1 = p1->next
if (num == p1->num)
{
printf ("姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n")
printf ("-------------------------------------------------------------------------------\n")
display (p1)
}
else
printf ("没有该学生记录,请核对!")
}
//写入文件
void writeData ()
{
FILE* fp//文件指针
struct student *p
fp = fopen("1.txt", "w")
if (!fp)
{
printf("文件打开错误!")
return
}
fprintf(fp,"%d\n", TOTAL_NUM)
for(p = headp!= NULLp= p->next)
{
fprintf(fp,"%s\t%ld\t%s\t%d\t%s\t%.0f\t%s\n", p->name, p->num, p->sex, p->age, p->address, p->tele_num, p->aihao)
}
fclose (fp)
}
void freeAll ()
{
struct student *p1, *p2
p1 = p2=head
while(p1)
{
p2=p1->next
free (p1)
p1 = p2
}
}
//读取文件
void readData ()
{
FILE* fp//文件指针
struct student *p1, *p2
fp = fopen("1.txt", "r")
if (!fp)
{
printf("文件打开错误!")
return
}
fscanf(fp,"%d\n", &TOTAL_NUM)
head = p1 = p2 = (struct student *)malloc(LEN)
fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%lf\t%s\n", p1->name, &p1->num, p1->sex, &p1->age, p1->address, &p1->tele_num, p1->aihao)
while(!feof(fp))
{
p1 = (struct student *)malloc(LEN)
fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%lf\t%s\n", p1->name, &p1->num, p1->sex, &p1->age, p1->address, &p1->tele_num, p1->aihao)
p2->next = p1
p2 = p1
}
p2->next = NULL
fclose(fp)
}
//删除学生信息
void del ()
{
struct student *p1, *p2
long int num
if (head == NULL)
{
printf("无学生记录!\n")
return
}
printf("请输入您要删除的学生的学号:")
scanf("%ld", &num)
p1 = head
while (num != p1->num &&p1->next != NULL)
{
p2 = p1
p1 = p1->next
}
if(num == p1->num)
{
if(p1 == head)
head = p1->next
else p2->next = p1->next
free(p1)
TOTAL_NUM--
}
else
printf("没有该学生记录,请核对!\n")
}
//修改学生信息
void change ()
{
struct student *p1, *p2
long int num
if (head == NULL)
{
printf ("无学生记录!\n")
return
}
printf ("请输入您要修改的学生的学号:")
scanf ("%ld", &num)
p1 = head
while (num != p1->num &&p1->next != NULL)
{
p2 = p1
p1 = p1->next
}
if(num == p1->num)
devise (p1)
else
printf("没有该学生记录,请核对!\n")
}
void devise (struct student *p)
{
int choice
choice = -1
do
{
printf("请选择您要修改的学生的信息内容:\n")
printf("+----------------------+\n")
printf("| 姓名 请按 1 |\n")
printf("| 学号 请按 2 |\n")
printf("| 性别 请按 3 |\n")
printf("| 年龄 请按 4 |\n")
printf("| 地址 请按 5 |\n")
printf("| 电话 请按 6 |\n")
printf("| 爱好 请按 7 |\n")
printf("| 取消 请按 0 |\n")
printf("+----------------------+\n")
printf("请输入您的选择:")
scanf("%d", &choice)
switch (choice)
{
case 0:
return
case 1:
printf("请输入新姓名:")
scanf("%s", p->name)
break
case 2:
printf("请输入新学号:")
scanf("%d", &p->num)
break
case 3:
printf("请输入新性别:")
scanf("%s", p->sex)
break
case 4:
printf("请输入新年龄:")
scanf("%s", &p->age)
break
case 5:
printf("请输入新地址:")
scanf("%s", p->address)
break
case 6:
printf("请输入新电话:")
scanf("%lf", &p->tele_num)
break
case 7:
printf("请输入新爱好:")
scanf("%s", p->aihao)
break
default:
printf("\n无效选项!")
break
}
}
while(choice != 0)
}
#include <malloc.h>
#include <string.h>
#include <io.h>
#define NULL 0
#define LEN sizeof(struct student)
#define FILE_DATA_PATH "c:\student.txt"
struct student
{
long int num
char name[20]
int age
char sex[4]
char birthday[10]
char address[30]
long int tele_num
char E_mail[20]
struct student *next
}
int TOTAL_NUM = 0
struct student *head = NULL
void welcome()
void mainmenu()
void record()
void insert(struct student *stu)
void display(struct student *stu)
void displayAll()
void query()
void query_by_num()
void query_by_name()
void readData()
void writeData()
void freeAll()
void del()
void change()
void devise(struct student *p)
int main()
{
char userName[9]
char userPWD[7]
int i
welcome()
for(i = 0i <3i++)
{
printf("\n管理员初始用户名和密码均为admin\n")
printf("请输入您的用户名:")
scanf("%s", userName)
printf("\n请输入您的密码:")
scanf("%s", userPWD)
if ((strcmp(userName,"admin")==0) &&(strcmp(userPWD,"admin")==0))
{
//用户名和密码正确,显示主菜单
mainmenu()
break
}
else
{
if (i <2)
{
//用户名或密码错误,提示用户重新输入
printf("用户名或密码错误,请重新输入!")
}
else
{
//连续3次输错用户名或密码,退出系统。
printf("您已连续3次将用户名或密码输错,系统将退出!")
}
}
}
return 0
}
//显示欢迎信息
void welcome()
{
printf("+---------------------------+\n")
printf("| |\n")
printf("| 欢迎使用学生信息管理系统 |\n")
printf("| |\n")
printf("+---------------------------+\n")
}
//系统主菜单
void mainmenu()
{
int choice
choice = -1
readData()
printf("\n温馨提示:为保证您的操作得到保存,请按正常顺序退出系统^_^\n")
do
{
printf("\n\n\n")
printf("\t\t\t--------------------------------\n")
printf("\t\t\t+学生信息管理系统 |\n")
printf("\t\t\t--------------------------------\n")
printf("\t\t\t+[1]----录入学生信息 |\n")
printf("\t\t\t+[2]----浏览学生信息 |\n")
printf("\t\t\t+[3]----查询学生信息 |\n")
printf("\t\t\t+[4]----删除学生信息 |\n")
printf("\t\t\t+[5]----修改学生信息 |\n")
printf("\t\t\t+[0]----退出系统 |\n")
printf("\t\t\t+*·*·*·*·*·*·*·*·*·*·|\n")
printf("\t\t\t--------------------------------\n")
printf("请输入您的选择:")
scanf("%d", &choice)
switch(choice)
{
case 0:
writeData()
freeAll()
exit(0)
case 1:
record()
break
case 2:
displayAll()
break
case 3:
query()
break
case 4:
del()
break
case 5:
change()
break
default:
printf("\n无效选项!")
break
}
}
while(choice != 0)
}
//录入学生信息
void record()
{
struct student *p0
p0 = (struct student *)malloc(LEN)
printf("请输入学生的学号:")
scanf("%ld",&p0->num)
printf("请输入学生的姓名:")
scanf("%s",p0->name)
printf("请输入学生的年龄:")
scanf("%d",&p0->age)
printf("请输入学生的性别:")
scanf("%s",p0->sex)
printf("请输入学生的出生年月:")
scanf("%s",p0->birthday)
printf("请输入学生的地址:")
scanf("%s",p0->address)
printf("请输入学生的电话:")
scanf("%ld",&p0->tele_num)
printf("请输入学生的E-mail:")
scanf("%s",p0->E_mail)
insert(p0)
printf("该学生的信息为:\n")
printf("-------------------------------------------------------------------------------")
printf("学号\t姓名\t年龄\t性别\t出生年月\t\t地址\t电话\tE-mail\n")
display(p0)
}
void insert(struct student *stu)
{
struct student *p0, *p1, *p2
p1 = head
p0 = stu
if(head == NULL)
{
head = p0
p0->next = NULL
}
else
{
while((p0->num >p1->num)&&(p1->next != NULL))
{
p2 = p1
p1 = p1->next
}
if(p0->num <= p1->num)
{
if(head == p1)
head = p0
else
p2->next = p0
p0->next = p1
}
else
{
p1->next = p0
p0->next = NULL
}
}
TOTAL_NUM++
}
void display(struct student *p)
{
printf("%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n", p->num, p->name, p->age, p->sex, p->birthday, p->address, p->tele_num, p->E_mail)
}
//浏览学生信息
void displayAll()
{
struct student *p
printf("学生总数:%d\n", TOTAL_NUM)
p = head
if(head != NULL)
{
printf("\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\n")
printf("-------------------------------------------------------------------------------")
do
{
display(p)
p = p->next
}
while(p != NULL)
}
printf("\n")
}
//查询学生信息
void query()
{
int choice
choice = -1
do
{
printf("\n")
printf("+--------------------+\n")
printf("| 按学号查询 请按 1 |\n")
printf("| 按姓名查询 请按 2 |\n")
printf("| 取消请按 0 |\n")
printf("+--------------------+\n")
printf("请输入您的选择:")
scanf("%d", &choice)
switch(choice)
{
case 0:
return
case 1:
query_by_num()
break
case 2:
query_by_name()
break
default:
printf("\n无效选项!")
break
}
}
while(choice != 0)
}
//按学号查询学生信息
void query_by_num()
{
int num
struct student *p1
printf("请输入学生的学号:")
scanf("%ld", &num)
if(head==NULL)
{
printf("无学生记录!\n")
return
}
p1=head
while(num!=p1->num &&p1->next!=NULL)
p1=p1->next
if(num == p1->num)
{
printf("\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\n")
printf("-------------------------------------------------------------------------------")
display(p1)
}
else
printf("没有该学生记录,请核对!")
}
//按姓名查询学生信息
void query_by_name()
{
char name[20]
struct student *p1
printf("请输入学生的姓名:")
scanf("%s", name)
if(head==NULL)
{
printf("无学生记录!\n")
return
}
p1=head
while(strcmp(name, p1->name) &&p1->next!=NULL)
p1=p1->next
if(!strcmp(name, p1->name))
{
printf("\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\n")
printf("-------------------------------------------------------------------------------")
display(p1)
}
else
printf("没有该学生记录,请核对!")
}
//写入文件
void writeData()
{
FILE* fp//文件指针
struct student *p
fp = fopen(FILE_DATA_PATH, "w")
if (!fp)
{
printf("文件打开错误!")
return
}
fprintf(fp,"%d\n", TOTAL_NUM)
for(p = headp!= NULLp= p->next)
{
fprintf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n",
p->num, p->name, p->age, p->sex, p->birthday, p->address, p->tele_num, p->E_mail)
}
fclose(fp)
}
void freeAll()
{
struct student *p1, *p2
p1=p2=head
while(p1)
{
p2=p1->next
free(p1)
p1=p2
}
}
//读取文件
void readData()
{
FILE* fp//文件指针
struct student *p1, *p2
fp = fopen(FILE_DATA_PATH, "r")
if (!fp)
{
printf("文件打开错误!")
return 0
}
fscanf(fp,"%d\n", &TOTAL_NUM)
head = p1 = p2 = (struct student *)malloc(LEN)
fscanf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n",
&p1->num, p1->name, &p1->age, p1->sex, p1->birthday, p1->address, &p1->tele_num, p1->E_mail)
while(!feof(fp))
{
p1 = (struct student *)malloc(LEN)
fscanf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n",
&p1->num, p1->name, &p1->age, p1->sex, p1->birthday, p1->address, &p1->tele_num, p1->E_mail)
p2->next = p1
p2 = p1
}
p2->next = NULL
fclose(fp)
}
//删除学生信息
void del()
{
struct student *p1, *p2
long int num
if(head == NULL)
{
printf("无学生记录!\n")
return
}
printf("请输入您要删除的学生的学号:")
scanf("%ld", &num)
p1 = head
while(num != p1->num &&p1->next != NULL)
{
p2 = p1
p1 = p1->next
}
if(num == p1->num)
{
if(p1 == head)
head = p1->next
else p2->next = p1->next
free(p1)
TOTAL_NUM--
}
else
printf("没有该学生记录,请核对!\n")
}
//修改学生信息
void change()
{
struct student *p1, *p2
long int num
if(head == NULL)
{
printf("无学生记录!\n")
return
}
printf("请输入您要修改的学生的学号:")
scanf("%ld", &num)
p1 = head
while(num != p1->num &&p1->next != NULL)
{
p2 = p1
p1 = p1->next
}
if(num == p1->num)
devise(p1)
else
printf("没有该学生记录,请核对!\n")
}
void devise(struct student *p)
{
int choice
choice = -1
do
{
printf("请选择您要修改的学生的信息内容:\n")
printf("+----------------------+\n")
printf("| 姓名 请按 1 |\n")
printf("| 年龄 请按 2 |\n")
printf("| 性别 请按 3 |\n")
printf("| 出生年月 请按 4 |\n")
printf("| 地址 请按 5 |\n")
printf("| 电话 请按 6 |\n")
printf("| E-mail请按 7 |\n")
printf("| 取消 请按 0 |\n")
printf("+----------------------+\n")
printf("请输入您的选择:")
scanf("%d", &choice)
switch(choice)
{
case 0:
return
case 1:
printf("请输入新姓名:")
scanf("%s", p->name)
break
case 2:
printf("请输入新年龄:")
scanf("%d", &p->age)
break
case 3:
printf("请输入新性别:")
scanf("%s", p->sex)
break
case 4:
printf("请输入新出生年月:")
scanf("%s", p->birthday)
break
case 5:
printf("请输入新地址:")
scanf("%s", p->address)
break
case 6:
printf("请输入新电话:")
scanf("%ld", &p->tele_num)
break
case 7:
printf("请输入新E-mail:")
scanf("%s", p->E_mail)
break
default:
printf("\n无效选项!")
break
}
}
while(choice != 0)
}
一、用例视图写出用例图的介绍,包括功能包、用例的简述等。不少于1000字。
二、用例描述1. Login英文名称:<Login> 中文名称:<登录> 参与者 :<User>
1.1 简要说明对登录的流程进行描述,操作者输入用户名、密码、选择用户类型进行登录。1.2 事件流1.2.1 基本流(1) 系统:显示登录界面;(2) 用户:输入登录信息,登录信息包括:用户名、密码、用户类型;(3) 用户:可能进行下面两种操作:(a) 用户:选择登录,则执行基本流(4);(b) 用户:选择重置,则返回到基本流(1);(4) 系统:检查用户的登录信息,可能有下边两种情况;(a) 登录成功:执行基本流(5);(b) 登录失败:执行备选流(1);(5) 登录成功,结束此用例。1.2.2 备选流(1) 登录失败:如果系统检测到用户名、密码不存在或错误,则提示用户输入的登录信息不正确,系统返回到选择登录前的状态,用户可以重新输入/修改登录信息,重新执行基本流(3)。1.3 特殊需求(约束和非功能性需求)
1.3.1 第一特殊需求要求用户密码安全。
1.4 前置条件1.4.1 第一前置条件 系统已启动到登录界面。
1.5 后置条件1.5.1 第一后置条件用户登录成功后,根据用户类型进入到相应界面。Administrator用户进入到管理员界面,Employee用户进入到个人用户界面。1.5.2 第二后置条件用户登录失败,返回到登录界面。
1.6 扩展点没有与此相关的内容。
1.7 附加说明1.7.1 附加说明1登录过程要求安全性。
1.8 优先级没有与此相关的内容。2. 略3. 略三、领域模型与用户字典1. 领域建模2. 用户字典2.1 Employee实 体 名Employee(员工)说明公司的一个雇员,具有一定的职务或岗位,按照职务或岗位或工作量领取薪水基本属性编号、姓名、级别、职务、当月薪水实 体 名ID(编号)说明员工的编号,由系统自动生成。4位阿拉伯数字,例如: 1234从属实体Employee实 体 名Name(姓名)说明员工的姓名姓名最多8个汉字或16个英文字母从属实体Employee
2.2 <略><第二条词汇>的定义在此处提供。应提供读者理解该概念所需的全部信息
2.3 <第一组词汇>[有时,可利用术语分组来提高可读性。例如,如果问题领域包含与建筑项目的统计和建设两方面都相关的术语(当开发建筑项目管理系统时就会出现这种情况),提供两个不同子领域中的术语会使读者混淆不清。为了解决这种问题,我们采用了术语分组的方法。当提供分组术语时,应提供一段简短说明来帮助读者理解<一组词汇>的含义。为了便于查找,同组内的术语应按字母顺序排列。] [<第一组词汇>的定义在此处提供。应提供读者理解该概念所需的全部信息。]
四、非功能性需求
1. 质量属性性能暂无要求安全性密码安全存储的安全易用性简单易用快捷操作持续可用性程序稳定可伸缩性暂无要求互操作性可更换数据库或存储成标准格式CSV可靠性不易死机测试严格鲁棒性能容忍非法操作易理解性易被开发人员看懂设计文档和代码规范可扩展性能增加功能可重用性系统的类可被重用可测试性易测试可维护性易修改错误、代码易理解可移植性易换平台易换数据库
2. 分析后的约束技术C++开发,程序员水平不高平台Win32数据库Csv文件或Access界面风格命令行时间一周其他暂无
#include<iostream>
#define max 5
using namespace std
struct student//////////定义数组结构体
{
int xuehao //学号
char name[10] //姓名
char sex //性别
int age//年龄
}stu[max]
//////定义数型
char a //全局函数a(操作数)
int i //全局函数i(循环操作数)
//////////函数列表
void display() //屏显函数
void init()//数组结构体初始化函数
void xuanze() //选择操作数函数
void sys(char a) //根据操作数执行函数
void addf()//增加数据的函数
void delf()//删除数据的函数
void inqf()//查询数据的函数
//////////////////////屏显
void display()
{
cout<<"==========Welcome to Student Manager System!=========="<<endl
cout<<endl
cout<<"A: Add new student"<<endl
cout<<"D: Delete a student"<<endl
cout<<"I: Inquiry a student"<<endl
cout<<"Q: Quit"<<endl
cout<<endl
xuanze()
}
/////////////////////////////信息初始化
void init()
{
for(i=0i<maxi++)
{
stu[i].name[10]='\0'
stu[i].sex='\0'//初始化所有的sex为'\0'
stu[i].age=0
}
}
////////////////////////操作选择
void xuanze()
{
cout<<"input your choose:"<<endl
cin>>a
if(a=='A'||a=='D'||a=='I'||a=='Q')
sys(a) //选择相应的操作数执行函数
else
{
cout<<"Error chooseing!"<<endl
cout<<endl
display()
}
}
/////////////////////相应操作数对应函数
void sys(char a)
{
switch(a)
{
case 'A':addf()
case 'D':delf()
case 'I':inqf()
case 'Q':exit(0) //退出
}
}
/////////////添加数据的函数
void addf()
{
int k=0,j,g
for(i=0i<maxi++)
{
if(stu[i].sex=='\0')k++
}
cout<<"剩余 "<<k<<" 个记录可以添加!"<<endl //输出剩余的可添加记录数目
if(k!=0)
{
cout<<"请输入你要添加的记录的个数,但是记录个数不能超过 "<<k<<endl
cin>>j
if(j>k)
{
cout<<"Error number!"<<endl
cout<<endl //显示美观需要
display()
}
else
{
for(i=0i<ji++)
{
for(int h=0h<maxh++)
{
if(stu[h].sex=='\0') //判断sex是否为'\0' 如果是则执行写入操作
{
cout<<"input the NO"<<i+1<<" 's xuehao:"<<endl
cin>>stu[h].xuehao
///判断数据非法与否
for(g=0g<maxg++)
{
if((stu[g].xuehao==stu[h].xuehao)&&g!=h)
{
cout<<"Duplicate number!"<<endl
cout<<endl
display()
}
}/////////判断学号是否相同
if(stu[h].xuehao<1||stu[h].xuehao>10000)
{
cout<<"Error number!"<<endl
cout<<endl
display()
}
cout<<"input the NO"<<i+1<<" 's name:"<<endl
cin>>stu[h].name
cout<<"input the NO"<<i+1<<" 's sex:('f' for female,'m' for male)"<<endl
cin>>stu[h].sex
///判断数据非法与否
if(stu[h].sex!='f'&&stu[h].sex!='m')
{
stu[h].sex='\0' //恢复sex的初始值,以便下次写入产生遗漏
cout<<"Error sex!"<<endl
cout<<endl
display()
}
cout<<"input the NO"<<i+1<<" 's age:(1-100)"<<endl
cin>>stu[h].age
///判断数据非法与否
if(stu[h].age<1||stu[h].age>100)
{
stu[h].sex='\0'//恢复sex的初始值,以便下次写入产生遗漏
cout<<"Error age!"<<endl
cout<<endl
display()
}
break//跳出本层循环
}
}
}
display()//返回
}
}
else
{
cout<<"No space to add new student!"<<endl
cout<<endl
display()
}
}
////////////////删除数据的函数
void delf()
{
int d,s=0
cout<<"Please input the number of the student you want to delete:"<<endl
cin>>d
if(d<1||d>10000)
{
cout<<"Error number!"<<endl
cout<<endl
display()
}
else
{
for(i=0i<maxi++)
{
if(stu[i].xuehao==d)
{
s++//是否实行删除的标志位
stu[i].xuehao=-1
stu[i].name[10]='\0'
stu[i].sex='\0'
stu[i].age=0
cout<<"Delete successfully!"<<endl
cout<<endl
display()
}
}
if(s==0)
{
cout<<"Not exist!"<<endl
cout<<endl
display()
}
}
}
/////////////查询数据的函数
void inqf()
{
int d,s=0
cout<<"Please input the number of the student you want to inquiry(0 for all):"<<endl
cin>>d
cout<<endl
if(d==0)
{
for(i=0i<maxi++)
{
if(stu[i].sex!='\0')
cout<<stu[i].xuehao<<","<<stu[i].name<<","<<stu[i].sex<<","<<stu[i].age<<endl
}
cout<<endl
display()
}
else
{
if(d<1||d>10000)
{
cout<<"Error number!"<<endl
cout<<endl
display()
}
else
{
for(i=0i<maxi++)
{
if(stu[i].xuehao==d)
{
s++ //是否存在该数字的标志
cout<<stu[i].xuehao<<","<<stu[i].name<<","<<stu[i].sex<<","<<stu[i].age<<endl
display()
}
}
if(s==0)
{
cout<<"Not exist!"<<endl
cout<<endl
display()
}
}
}
}//ingf
//////////////主函数
void main()
{
init() //初始化
display()//屏显(主界面)
}
用了我整整三个小时啊,如果你还有什么问题,或者调试的过程中发现了什么问题,又或者你想实现文件的读取存储功能的可以留下你的QQ,我会主动联系你的了.这两天我都有时间.....
根据数据库关系建立实体并生成该实体的通用处理方法(增删改查)
根据项目功能描述搭建页面或窗体,把相应功能实现。
1.需求分析:通过对市场、客户调查得出需要实现的功能,你这里就自己考虑或和朋友交流得出要实现的功能,给出点个人想法:既然是学籍信息管理必然有录入、查询、显示、修改等基本功能,然后就是统计、密码、管理员和游客权限划分之类的功能,然后延伸出来的就是管理员设置、游客设置等功能。
2.结构设计:通过对功能的把握,设计程序的基本结构,我的理解:首先登陆系统肯定是一个无限循环,提供菜单对应各个功能,用户可以进入每个小功能菜单,各个小功能菜单需提供真实操作和一个返回上一层操作等等。
3.功能、结构都明确了就可以开始写代码了,不在详述。。。。。。。