@XingdingCAO
2017-07-16T14:17:15.000000Z
字数 4268
阅读 3038
简易打分系统
源码地址:Vote(坚果云)
实际,很难严格按照自顶向下的开发顺序进行,因为只有从表现层发现需求,才能设计对应的业务逻辑层和数据访问层。
Model(部分)
//Account
namespace Vote.Models
{
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
[Table("Account")]
public partial class Account
{
[Key]
[StringLength(10)]
public string Username { get; set; }
[Required]
[StringLength(10)]
public string Password { get; set; }
public int GroupID { get; set; }
}
}
//DbContext
namespace Vote.Models
{
using System.Data.Entity;
public partial class AccountDb : DbContext
{
public AccountDb()
: base("name=AGM_Conn")
{
}
public virtual DbSet<Account> Accounts { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Account>()
.Property(e => e.Username)
.IsFixedLength();
modelBuilder.Entity<Account>()
.Property(e => e.Password)
.IsFixedLength();
}
}
}
//Group
namespace Vote.Models
{
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
[Table("Group")]
public partial class Group
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
[Required]
public int MemberCount { get; set; }
[Required]
[StringLength(10)]
public string LeaderName { get; set; }
}
}
//DbContext
namespace Vote.Models
{
using System.Data.Entity;
public partial class GroupDb : DbContext
{
public GroupDb()
: base("name=AGM_Conn")
{
}
public virtual DbSet<Group> Groups { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Group>()
.Property(e => e.LeaderName)
.IsFixedLength();
}
}
}
由于ASP.Net(webform)前后端耦合严重,所以只能尽量分离出一部分逻辑处理,而大部分逻辑处理都与表现实际耦合在一起。
asp:Content
标签中设计元素*.aspx.cs
文件和其他逻辑处理类分页面设计
打分实现Vote(仅显示该组员未打分的项目)
组内管理ManageGroup
.aspx.cs
后缀文件中,必须实现的有:身份验证后设置AuthCookie
,前端数据的获取与初步验证,GridView
数据源的绑定等。单独的逻辑处理
身份验证相关BLL.Authectic
判断用户类别(引用情况:被Login.aspx.cs调用)
public static readonly int ADMIN = 2;
public static readonly int LEADER = 1;
public static readonly int USER = 0;
public static readonly int INVALID = -1;
public static int CheckUser(string username,string passwd);
根据Cookie返回用户类别
public static int FindCatalogBycookie();
通过Cookie返回用户所在小组
public static Group FindGroupBycookie();
根据Cookie返回用户名
public static string FindUsernameBycookie();
更改用户有关ManageUser
(设计出现了点儿问题,参数应该只传入进过初步验证过后的数据,而包装成Model类与进一步验证则应该由BLL类完成)
//以组别注册
public static bool AddGroup(Account[] list,bool[] valid,int leaderIndex=0);
//添加组员
public static bool AddUser(Account usr);
//更改组长
public static bool ChangeLeader(string usrname);
//删除组员
public static bool DelUser(Account usr);
与项目相关ManageProject
(在后来发觉到前面设计的问题时,我尽量将参数设计未原始的数据类型,然后包装、验证后在访问DAL来实现)
public static int INVALID = -1;//非法
public static int NONBEGIN = 0;//提交中
public static int NORMAL = 1;//打分中
public static int END = 2;//打分已截止
//检查课题状态
public static int CheckSubjectStatus(string name)
//查找某一课题下的项目
public static Project[] FindProjectsBySubjectName(string subjectName)
//查找可提交的课题名(某个小组)
public static string[] FindSubmitableSubject()
//提交项目
public static bool SubmitProject(string subjectName,int groupId)
//提交分数
public static bool SubmitMark(string subjectName, int groupId,double[] mark)
//查找可以打分的项目(某个人)
public static int[] FindMarkableProject(string subjectName)
//查找可以打分的课题
public static Subject[] FindMarkableSubject()
//查找某一课题下项目的打分比例(小组)
public static string[] FindVoteRatio(string subjectName)
//查找某一课题下项目的得分
public static double[][] FindVote(string subjectName)
//添加课题
public static bool AddSubject(string name,DateTime deadline,DateTime voteDeadline)
基本设计样式
namespace Vote.DAL
{
public class AccountDAL
{
private AccountDb _context;
public AccountDAL()
{
_context = new AccountDb();
}
//添加用户
public bool Add(Account usr,bool isLeader=false);
//删除用户
public bool Del(Account usr);
//按照用户名查找该用户的类别
public string FindUserCatalog(string username);
//按照用户名查找该用户的信息
public Account FindByUsername(string username);
}
}
保存到Excel的方法